循环里面的递归无法理解!

2020-06-14 社会 93阅读
这么讲吧:
fun(3);//初始调用时,a值等于3
为了方便说,后面调用fun函数时,a值等于几,就叫几号递归
fun(3)//3号递归开始执行
运行printf("%d ",a); //输出3
运行for循环,i=0,i<3,
调用fun(3-1)
fun(2)//2号递归开始执行
运行printf("%d ",a); //输出2
运行for循环,i=0,i<2,
调用fun(2-1)
fun(1)//1号递归开始执行
运行printf("%d ",a); //输出1
运行for循环,i=0,i<1,
调用fun(1-1)
fun(0)//0号递归开始执行
运行printf("%d ",a); //输出0
运行for循环,i=0,i<0,不成立
------------------------>至此,输出了3,2,1,0
0号递归不成立后,回归1号递归的for循环处,进行i++处理,
运行for循环,i=1,i<1,不成立
1号递归不成立后,回归2号递归的for循环处,进行i++处理,
运行for循环,i=1,i<2,
调用fun(2-1)
再度运行fun(1)//1号递归
从上面可以看出,1号递归的运行会输出1,0
------------------------>至此,输出了3,2,1,0,1,0
1号递归不成立后,回归2号递归的for循环处,进行i++处理,
运行for循环,i=2,i<2,不成立
2号递归不成立后,回归3号递归的for循环处,进行i++处理,
运行for循环,i=1,i<3,
调用fun(3-1)
再度运行fun(2)//2号递归
从上面可以看出,2号递归的运行会输出2,1,0,1,0,2,1,0
------------------------>至此,输出了3,2,1,0,1,0,2,1,0,1,0,2,1,0
2号递归不成立后,回归3号递归的for循环处,进行i++处理,
运行for循环,i=2,i<3,
调用fun(2-1)
再度运行fun(1)//1号递归
从上面可以看出,1号递归的运行会输出1,0
------------------------>至此,输出了3,2,1,0,1,0,2,1,0,1,0,2,1,0,1,0
2号递归不成立后,回归3号递归的for循环处,进行i++处理,
运行for循环,i=3,i<3,不成立
至此递归结束
所以最后输出结果为:
3 2 1 0 1 0 2 1 0 1 0 2 1 0 1 0
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com