递归(三)

 

http://www.cnblogs.com/zysbk/archive/2012/11/16/2773819.html  原文

 

 

下面再给大家复习下递归

什么叫递归呢?“和尚讲故事”,就是方法自己调自己,这就是递归。

 

三、方法自己调自己

我们先调下T1方法,让大家看个东西:

 

四、让大家看的东西

 

五、调用堆栈

    用堆栈来监视一下:

一开始调了main方法

再调T1方法

再调T2方法

注意一下顺序,类似于栈结构,先进来在最下面,后进来在最上面。

刚T2方法执行完毕,T2方法没了。

调完之后,从栈里面出来了。

 

再看下我调Say方法。

一开始还是调的main方法,

一直在调Say方法,这个栈越来愈大,直到系统报错。

 

六、溢出,系统报错

  递归里面注意的地方:一定要有终止条件。

  接下来我们看两个例子:

 

七、这个方法的执行结果是什么呢?

如果代码中加上:index++; 又是什么答案呢?

不让用VS测试的时候,自己可以在纸上用纸和笔划一下。

有一些个公司喜欢用这种装逼的题目当面试题的。

答案是4a4b,为什么是这样呢?

我们画图进行分析:

 

八、例一分析图示

对于初学者来讲,这幅图可能还是比较的抽象,所以,建议调试一下。

 

九、例一分析图示二

 

十、例二代码

大家再想想,这段代码的输出结果。考验人类思维极限呦。

下面我们还是画个图就行演示:

 

十一、例二分析图

n在自己的作用域范围内,互不影响。

在做一个程序的时候,能用循环做的,就不要用递归来做。用递归的话,效率极其低下。

想深入研究的朋友可以看下关于:尾递归优化的问题。

在上面两个题目中递归因为栈,才能记住,执行完后面调的方法之后返回去调没有执行完的方法里面的语句。

下面我们看下递归加载和递归删除:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值