今天看了二叉树,遇到了递归,结果半天也想不起来递归是什么。 (我平时很少使用递归。 )既然用了,我想总结一下。
我参考了有回复的递归有回复的递归网上的伟人的博客。
有这样一个程序:
#includestdio.hintcheng(inta ) if ) a1 ) a=a*cheng ) a-1 ); printf(%d(n ),a ); }返回a; (} int main ) ) { int b=5,c; c=城(b; printf('%d ',c ); }
您可以看到它实现了疲劳5x4x3x2x1,但计算机就是这样运行的。
1*2 2*3 6*424*5不是从5*4开始的
让我们来看看递归函数:
intcheng(inta ) if ) a1 ) a=a* cheng (a-1 ); printf(%d(n ),a ); }返回a; }从输出中可以看出,疲劳的乘法是1(a-1=1)。 此时,a从2 )开始。 1不能满足if的判断,直接返回。 请注意这里不是return结束,而是回到楼上,楼上是不是2 )。 此时,a为3。 但是,2满足了if的判断,是吗?
a=2*城(2;
此时,a不是2吗
然后进入上层,进入if判断,
a=3*2
就这样一层一层地上楼。
一言以蔽之:
请特别注意带有return的递归。 从最内层一层一层地出去。
验证:我给你上面的程序return a; 这句话改称return 10; 看看会发生什么?
最内层原本恢复1,是因为我强制恢复10,所以变成2x10;
返回应该返回20,但强制只能返回10,因此为3x10;
这一部分参考了那个大人物的博客:
3359 blog.csdn.net/it 8343/article/details/80180448
让我们来看看没有返回的递归:
没有返回返回值的递归#include'stdio.h'voidfun(intx ) x; printf(%d(n ),x ); if(x==10 ) {返回; //其中,return并不是返回任何数字,而是创建一个结束符,然后退出程序。 否则(fun(x ); }int main () fun ) ) 0; 返回0; }看看执行结果:
这里不是最内层的层回到了上层。 在简单的函数中调用函数。 如果在调用后再添加一句话呢?
#include 'stdio.h'int i=0; voidfun(intx ) x; printf(%d(n ),x ); if(x==10 ) {返回; //其中,return并不是返回任何数字,而是创建一个结束符,然后退出程序。 否则(fun(x ); printf(I=%d(n ),I ); }int main () fun ) ) 0; 返回0; }
这需要注意函数的完整性问题!
结束
因为语言表达有限,所以说不好,请谅解。 如果有错误的话,谢谢您的指出。
thanks!