目录

  • 基本概念
  • 例题
  • 递归和循环的性能区别
  • 面试题10-I“斐波那契数列”
  • 面试题10-II“青蛙跳台阶问题”
  • 用递归分析问题并基于循环写代码
  • 面试题14-I"剪绳子"
  • 面试题14-II“剪绳子II”
  • 面试题47“礼物的最大价值”
  • 面试题48“最长不含重复字符的子字符串”

基本概念

递归 :在一个函数的内部调用这个函数自身

循环 :通过设置计算的初始值及终止条件,在一个范围内重复运算。

通常递归的代码会比较简洁,但效率低,且很多计算都是重复的。

例题

递归和循环的性能区别

面试题10-I“斐波那契数列”

递归 单词循环结束后数据也没了java java递归和循环区别_递归 单词循环结束后数据也没了java

递归方法的中间结果都重复计算了,所以效率地下。循环方法就很简单,递归 单词循环结束后数据也没了java java递归和循环区别_递归 单词循环结束后数据也没了java_02

面试题10-II“青蛙跳台阶问题”

递归 单词循环结束后数据也没了java java递归和循环区别_数据结构_03

如果要用递归方法,一定要保存中间计算结果,可以用个dictionary,不然就超时了 = =

面试题60“n个骰子的点数”

用递归分析问题并基于循环写代码

面试题14-I"剪绳子"

递归 单词循环结束后数据也没了java java递归和循环区别_数据结构_04

这个题就很灵活,不是那种死板的背包问题,而是真的要把问题给分解成子问题,没办法去套用方法。而且这个题很烦啊 = = 长度是2或者3的时候返回的是1跟2,但用于计算更长的长度的时候,2跟3的结果就是2和3。。。。就不用拆分了。。。

另外这个题可以用贪心来做,长度大于5的时候要让3多一点,长度是4的时候要剪成两个2。

贪心我目前感觉就像是在 耍流氓 - - 我看见这个题,我要是能想出来 贪心 什么,我就知道怎么解,要是没发现,就凉了。而且贪心策略也基本上只能是提出个策略然后去证明。。(也许后续学习的过程中还会再来修正,目前就是这么理解的。。。头大 LOL

面试题14-II“剪绳子II”

递归 单词循环结束后数据也没了java java递归和循环区别_数据结构_05

啊这。。好像在返回的时候 $ %(1000000007)$ 就行了啊

面试题47“礼物的最大价值”

面试题48“最长不含重复字符的子字符串”