【发布时间】:2013-11-18 18:53:07
【问题描述】:
我正在编写一个递归方法来计算乘法斐波那契数列。此序列类似于常规斐波那契数列,不同之处在于不是将前两个数字相加来查找下一个数字,而是将它们相乘。我目前编写了这个方法,但不是返回我认为正确的结果,而是无论输入数字是什么,该方法都返回 0。任何帮助或想法将不胜感激。 方法如下:
public static int fibonacciPower(int n)
{
if(n < 2)
{
return n;
}
else
{
return (fibonacciPower(n-1) * fibonacciPower(n-2));
}
}
【问题讨论】:
-
请注意,斐波那契是一种算法,一般来说,递归是一种非常糟糕的实现。
-
你在哪里调用方法?有什么价值?
-
@Servy 尾递归对我来说似乎很好......
-
@Theolodis Fib(5) 计算 Fib(4) 和 Fib(3)。 Fib(4) 再次计算 Fib(3) 和 Fib(2)。 Fib(3)(运行两次)计算 Fib(2)(为 Fib(4) 计算并在 Fib(3) 中计算两次)。我希望你能明白。它实际上将 O(n) 操作转换为 O(2^n) 操作。也就是说,除非您缓存所有先前计算的值,但如果您这样做,内存占用将从 O(1)(使用迭代解决方案)变为 O(n)。
-
这就是所谓的尾递归......
标签: java algorithm recursion fibonacci multiplication