递归-循环里面放一个递归函数

如下是一个常见的递归函数,在循环中调用自身 , 那么如何理解这种代码呢?
其实就是把递归语句看成是一个普通的可执行语句,看成调用另外一个函数的语句就可以了

#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 , 再做3f(2),做第一次f(2)的时候(i = 0)
			 再代入一次 a = 2f(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)要做2f(1),所以要做第二次f(1),然后f(1)又执行一次
			 f(0)语句,然后我们做完第二次f(1)语句,说明f(2)的循环已经做了2次了,已经做完了,f(2)执行
			 完了自己的语句,就说明f(3)第一次调用f(2)的语句已经执行完了,接下来执行第二次f(2)语句
			 接下来的情况和上述分析完全一样,其实就是不断的套语句,
}          
		    

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46028606/article/details/105461618