尾递归用途:
递归循环最终计算出结果。
尾递归原理:
方法参数上引用了上一次的计算结果,也可以理解为将计算结果作为参数传递了过去。
以计算斐波那契数列第n项为例(n为下标,从0开始),
斐波那契数列:0、1、1、2、3、5、8、13、21、34、……
使用递归,尾递归,循环三种实现方式:
递归:
int fibonacci(int n) { if (n == 0) return 0; else if (n == 1) return 1; else return fibonacci(n-1)+fibonacci(n-2); }
尾递归:
int fibonacci_tail(int n, int ret1, int ret2) { if (n == 0) return ret1; else return fibonacci_tail(n-1, ret2, ret1 + ret2); }
循环:
int fibonacci_cycle(int n) { int fib; int f0 = 0; int f1 = 1; if (n == 0) return f0; else if (n == 1) return f1; else { for (int $i = 2; $i <= n; $i++) { fib = f0 + f1; f0 = f1; f1 = fib; } return fib; } }
参考:https://www.zhihu.com/question/20761771