使用线性递归计算第 n 个斐波那契数
Computing the nth Fibonacci number using linear recursion
我已经尝试二进制递归找到第n个斐波那契数(或通过在main()
中使用for
循环找到整个斐波那契数列)但是根据Data Structures and Algorithms in Java(第 6 版)作者:Michael T. Goodrich;这是一种非常低效的方法,因为它需要对该方法进行指数级调用。一种有效的递归技术是线性递归,如下所示;
/**Returns array containing the pair of Fibonacci numbers, F(n) and F(n-1)*/
public static long[] fibonacciGood(int n) {
if(n<=1) {
long[] answer = {n,0};
return answer;
}else {
long[] temp = fibonacciGood(n-1); //returns {F(n-1), F(n-2)
long[] answer = {temp[0]+temp[1], temp[0]}; //we want {F(n), F(n-1)}
return answer;
}
}
每当我 运行 代码它 returns 作为参考
[J@15db9742
这不是您想要的答案。我应该在 main()
中写些什么才能得到想要的答案?
您正在尝试将数组打印到控制台,这导致输出数组的内存地址。您可能想要遍历返回的数组,打印每个元素以获得所需的输出。
试试下面这个。您可以参考 api here.
public static void main(String[] args) {
System.out.println(Arrays.toString(fibonacciGood(4)));
}
这里是打印数组对象,所以你得到了这些结果。在内部它调用对象的 toString 方法,return getClass().getName() + "@" + Integer.toHexString(hashCode());
。所以你得到的价值是 [J@15db9742.
您可以直接使用 convert ,如下所示(适用于 Java 版本 5 及更高版本)
System.out.println(Arrays.toString(fibonacciGood(4)));
您可以通过将其转换为如下列表来打印它(在 Java 8 或更高版本中)(此处不宜使用流,但仅供参考) :
System.out.println(Arrays.stream(fibonacciGood(4)).boxed().collect(Collectors.toList()));
我已经尝试二进制递归找到第n个斐波那契数(或通过在main()
中使用for
循环找到整个斐波那契数列)但是根据Data Structures and Algorithms in Java(第 6 版)作者:Michael T. Goodrich;这是一种非常低效的方法,因为它需要对该方法进行指数级调用。一种有效的递归技术是线性递归,如下所示;
/**Returns array containing the pair of Fibonacci numbers, F(n) and F(n-1)*/
public static long[] fibonacciGood(int n) {
if(n<=1) {
long[] answer = {n,0};
return answer;
}else {
long[] temp = fibonacciGood(n-1); //returns {F(n-1), F(n-2)
long[] answer = {temp[0]+temp[1], temp[0]}; //we want {F(n), F(n-1)}
return answer;
}
}
每当我 运行 代码它 returns 作为参考 [J@15db9742
这不是您想要的答案。我应该在 main()
中写些什么才能得到想要的答案?
您正在尝试将数组打印到控制台,这导致输出数组的内存地址。您可能想要遍历返回的数组,打印每个元素以获得所需的输出。
试试下面这个。您可以参考 api here.
public static void main(String[] args) {
System.out.println(Arrays.toString(fibonacciGood(4)));
}
这里是打印数组对象,所以你得到了这些结果。在内部它调用对象的 toString 方法,return getClass().getName() + "@" + Integer.toHexString(hashCode());
。所以你得到的价值是 [J@15db9742.
您可以直接使用 convert ,如下所示(适用于 Java 版本 5 及更高版本)
System.out.println(Arrays.toString(fibonacciGood(4)));
您可以通过将其转换为如下列表来打印它(在 Java 8 或更高版本中)(此处不宜使用流,但仅供参考) :
System.out.println(Arrays.stream(fibonacciGood(4)).boxed().collect(Collectors.toList()));