尾递归用途:

  递归循环最终计算出结果。

尾递归原理:

  方法参数上引用了上一次的计算结果,也可以理解为将计算结果作为参数传递了过去。

 

以计算斐波那契数列第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