函数递归问题请教

来源:百度知道 编辑:UC知道 时间:2024/06/23 01:57:09
#include<stdio.h>

void main()
{
void func(int n);
func(10);
}

void func(int n)
{
if(n>0)
func(n-1);
printf("%d\n",n);
}

程序运行的时候,输出结果为
1
2
3
4
5
6
7
8
9
10
那么在输出之前,1~9是存储了吗?存在哪里?
每次调用func(n-1); 后面的printf("%d\n",n); 是如何处理的,没有执行吗?

不是存储了,是函数调用的执行结果,
后面的还是依次执行,譬如执行func(2)就是
{func(n-1);printf("%d\n",n);}
也就是{func(1);printf("%d\n",n);}
又func(1)相当于是{func(0);printf("%d\n",n);}所以最后的执行的代码就是
{printf("%d\n",n);//n=0
printf("%d\n",n);//n=1
printf("%d\n",n);//n=2
}
输出结果
0
1
2
递归的执行只是把递归函数用相对应的代码代替,对之前已经存在的代码没有影响