/*网络摘录加工*/
尾部递归是一种编程技巧。递归函数是指一些会在函数内调用自己的函数,如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。尾部递归的函数有助将算法转化成函数编程语言,而且从编译器角度来说,亦容易优化成为普通循环。这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代码的开头来实现的。如果有尾部归递,就只需要叠套一个堆栈,因为电脑只需要将函数的参数改变再重新调用一次。利用尾部递归最主要的目的是要优化。
#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
根据观察,尾递归可以简易的理解为,在函数调用时,参数已经过计算,然后和形参结合。尾递归的本质是:将单次计算的结果缓存起来,传递给下次调用,相当于自动累积。