~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

/*网络摘录加工*/
尾部递归是一种编程技巧。递归函数是指一些会在函数内调用自己的函数,如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。尾部递归的函数有助将算法转化成函数编程语言,而且从编译器角度来说,亦容易优化成为普通循环。这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代码的开头来实现的。如果有尾部归递,就只需要叠套一个堆栈,因为电脑只需要将函数的参数改变再重新调用一次。利用尾部递归最主要的目的是要优化。

#include "stdio.h"
#include "math.h"
int f(int n,int A,int B)
{
    if (n < 2)
    {
        return A;
    }
    else
    {
        return f(n-1,B,A+B);
    }
}
int main(void)
{
    int n, rs;
    scanf("%d",&n);
    rs = f(n, 1, 1);
    printf("%d ", rs);
    return 0;
}
请输入斐波那契数n:10
factorial_tail(9, 1, 2)
factorial_tail(8, 2, 3)
factorial_tail(7, 3, 5)
factorial_tail(6, 5, 8)
factorial_tail(5, 8, 13)
factorial_tail(4, 13, 21)
factorial_tail(3, 21, 34)
factorial_tail(2, 34, 55)
factorial_tail(1, 55, 89)
55

根据观察,尾递归可以简易的理解为,在函数调用时,参数已经过计算,然后和形参结合。尾递归的本质是:将单次计算的结果缓存起来,传递给下次调用,相当于自动累积。

posted on 2016-03-12 00:39  LuoTian  阅读(409)  评论(0编辑  收藏  举报