我正在尝试回顾有关斐波那契递归的算法。下列:
public int fibonacci(int n) { if(n == 0) return 0; else if(n == 1) return 1; else return fibonacci(n - 1) + fibonacci(n - 2); }
是 不是我要找的,因为它是贪婪的。这将成倍增长只看[Java递归斐波那契数列-初始参数越大,将进行的无用调用越多)。
可能会出现类似“循环参数移位”的情况,其中调用先前的斐波那契值将检索值,而不是再次进行计算。
也许像这样:
int fib(int term, int val = 1, int prev = 0) { if(term == 0) return prev; return fib(term - 1, val+prev, val); }
此函数是尾递归的。这意味着可以对其进行优化和高效执行。实际上,它已被优化为一个简单的循环。