-
-
[讨论]尾递归~
-
发表于:
2010-5-25 10:41
5920
-
今天才听说有个编程技巧叫做尾递归,据说比传统递归效率高些。
算阶乘的传统递归代码:
# include <stdio.h>
int fun (int n){
return (n <= 1) ? 1 : n * fun (n - 1) ;
}
void main (){
printf ("%d\n", fun (5)) ;
}
分析:
过程展开如下
fun (5)
=> 5 * fun (4)
=> 5 * 4 * fun (3)
=> 5 * 4 * 3 * fun (2)
=> 5 * 4 * 3 * 2 * fun(1)
=> 5 * 4 * 3 * 2 * 1
=> 5 * 4 * 3 * 2
=> 5 * 4 * 6
=> 5 * 24
=> 120
算阶乘的尾递归代码:
# include <stdio.h>
int fun (int n, int a){
return (n <= 1) ? a : fun (n-1, a*n) ;
}
void main (){
printf ("%d\n", fun (5, 1)) ;
}
分析:
过程展开如下
fun (5,1)
=> fun (4, 5)
=> fun (3, 20)
=> fun (2, 60)
=> fun (1, 120)
=> 120
直觉上觉得尾递归确实好一点,但是不能说服自己。请各位看看,讨论讨论,这个方式究竟好不好,好在哪,怎么好~~谢谢
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课