目录
- 基本概念
- 例题
- 递归和循环的性能区别
- 面试题10-I“斐波那契数列”
- 面试题10-II“青蛙跳台阶问题”
- 用递归分析问题并基于循环写代码
- 面试题14-I"剪绳子"
- 面试题14-II“剪绳子II”
- 面试题47“礼物的最大价值”
- 面试题48“最长不含重复字符的子字符串”
基本概念
递归 :在一个函数的内部调用这个函数自身
循环 :通过设置计算的初始值及终止条件,在一个范围内重复运算。
通常递归的代码会比较简洁,但效率低,且很多计算都是重复的。
例题
递归和循环的性能区别
面试题10-I“斐波那契数列”
递归方法的中间结果都重复计算了,所以效率地下。循环方法就很简单,
面试题10-II“青蛙跳台阶问题”
如果要用递归方法,一定要保存中间计算结果,可以用个dictionary,不然就超时了 = =
面试题60“n个骰子的点数”
用递归分析问题并基于循环写代码
面试题14-I"剪绳子"
这个题就很灵活,不是那种死板的背包问题,而是真的要把问题给分解成子问题,没办法去套用方法。而且这个题很烦啊 = = 长度是2或者3的时候返回的是1跟2,但用于计算更长的长度的时候,2跟3的结果就是2和3。。。。就不用拆分了。。。
另外这个题可以用贪心来做,长度大于5的时候要让3多一点,长度是4的时候要剪成两个2。
贪心我目前感觉就像是在 耍流氓 - - 我看见这个题,我要是能想出来 贪心 什么,我就知道怎么解,要是没发现,就凉了。而且贪心策略也基本上只能是提出个策略然后去证明。。(也许后续学习的过程中还会再来修正,目前就是这么理解的。。。头大 LOL
面试题14-II“剪绳子II”
啊这。。好像在返回的时候 $ %(1000000007)$ 就行了啊
面试题47“礼物的最大价值”
面试题48“最长不含重复字符的子字符串”