递归 C语言

来源:百度知道 编辑:UC知道 时间:2024/06/15 03:25:29
int ssss(int n)
{ int x;
if(n==1) return 1;
x=ssss(n-1)*n;
puts("a");
return x;
}
分析一下为什么puts("a")执行n-1次. 越清楚越好.

int ssss(int n)
{
int x;
printf("%d:\n", n); /*这样可以跟踪调用过程*/
if(n==1) return 1;
x=ssss(n-1)*n;
printf("%d:a\n", n); /*这样可以跟踪调用过程*/
return x;
}

因为总共会递归n次,而最后一次n=1时会在 return 1;这一句完成返回,并不会执行其后面的puts("a");所以会执行n-1次puts("a")

因为最后一次调用的时候被return返回了。没有能执行到puts()函数

在n>1是时候,puts("a");是不会执行的,因为程序要递归调用,一直要到n==1时返回1时开始回退,此时退回到n==2的时候在执行了x=1*2之后第一次执行puts(),此后会在每次回退到上一层时执行puts(),直到执行到n等于传入的值时为止,因此共执行n-1次。

建议单步执行程序,以便更好得理解这个过程。

你看好了~~~~~

程序结构为:

if(n==1)
return 1;//返回了哦,出口一

x=ssss(n-1)*n;
puts("a");
return x;//也返回,出口二

程序有两个返回出口。

这两门什么时候开启呢?

当n==1的时候,出口一打开。那么出口二还有用吗?没用了,子程序都返回了。

当n!=1的时候,出口一肯定不代开吧,那么只能通过出口二出去。

关puts("a")鸟事儿?呵呵,puts("a")是和出口二绑在一起的。

当传出n时,前n-1次由出口二返回,最后一次由出口一返回。所以,被出口二绑定的puts("a")只会执行n-1次。