俊介三

一天更新一点,一天积累一点

导航

尾递归

Posted on 2013-03-24 16:08  俊介三在前进  阅读(128)  评论(0)    收藏  举报

尾递归(tail recursive)是指把结果保存在参数中,而不是每次都要重新计算子结果的值。相当于把中间过程保存了以提高计算效率

#include <stdio.h>

int fac(int n){
    if(n==0 || n==1) return 1;
    else return fac(n-1)*n;
}

//tail recursive
//满足两点:1递归调用在函数最后执行;2它的返回值不属于表达式的一部分。
int fac2(int n, int a){
    if(n==0 ||n==1) return a;
    else return fac2(n-1,n*a);
}

int main(){
    printf("%d\t%d\n",fac(4),fac2(4,1));
    return 0;
}