递归问题思考与复盘

递归问题思考与复盘

递归问题实际上是将一个大的问题分解成几个小的问题,然后将小的问题再次分为更小的问题,然后就这样重复操作下去最后到最小的问题我们能够解决,然后再解决上一个较小的问题,直到解决这个大问题。

举个栗子

我们面试的时候可能会遇到这个问题,走楼梯,你一次只能上一层台阶或者两层,那么走到第n层有几种走法呢。
思考
一次只能上一层或者两层,那么走上第n层,他必定是从n-1层或者n-2层上来的,我们只需要计算走上n-1和n-2层的走法然后相加就可以知道n层的结果了,可是怎么计算第n-1和n-2的结果呢,然后们再次进行相同的思考,计算n-1,我们需要知道n-2和n-3,计算n-2需要知道n-3和n-4,然后依次类推,最后需要计算第一层和第二层的方法,可以知道第一层是一种,第二层是两种。用一个函数来描述就是:f(n)=(f(n-1)+f(n-2)
用递归函数解决

int f(int n) {
  if (n == 1) return 1;
  if (n == 2) return 2;
  return f(n-1) + f(n-2);
}

但是进一步思考这样写会有很多重复计算堆栈溢出问题,就比如上面我们重复计算n-3,这样会造成很多计算资源浪费,我们可以使用一种数据结构hashmap来解决,对于堆栈溢出问题,我们则可以设置限制递归调用的最大深度的方式来解决这个问题,如果调用的深度超过某个值我们就停止调用并提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值