如下是一个常见的递归函数,在循环中调用自身 , 那么如何理解这种代码呢?
其实就是把递归语句看成是一个普通的可执行语句,看成调用另外一个函数的语句就可以了
#include<stdio.h>
void f(int a)
{
int i;
printf("%d " , a);
for( i = 0 ; i < a ; i++ )
f(a - 1);
}
int main()
{
f(3);
return 0;
}
void f(int 3)
{
printf("%d " ,3)
for(i = 0 ; i < 3 ; i++)
f(2); 文字和图片(图片在下面)描述一起看更好
代入a = 3 , 到循环中, 发现其实就是先输出3 , 再做3次f(2),做第一次f(2)的时候(i = 0)
再代入一次 a = 2 , f(2)又做了两次f(1) , 是先输出2再做f(1) ,做f(1)的时候再输出1,
再做f(0),输出0,f(0)的起始条件i=0,一开始就是0<0的循环条件,不符合,就说明做完了,
f(0)做完,然后说明f(1)的f(0)语句做了一次,但是f(1)中只能做一次,然后说明f(1)语句也
做完了,f(1)语句在f(2)里面,然后f(2)要做2次f(1),所以要做第二次f(1),然后f(1)又执行一次
f(0)语句,然后我们做完第二次f(1)语句,说明f(2)的循环已经做了2次了,已经做完了,f(2)执行
完了自己的语句,就说明f(3)第一次调用f(2)的语句已经执行完了,接下来执行第二次f(2)语句
接下来的情况和上述分析完全一样,其实就是不断的套语句,
}