递归与分治

我认为递归的解法就是一个返回值问题,如果是用的函数递归,重点应该放在return上去,要求出递归的表达式。知道n-1能求出n的答案。以此类推。

要认为这是一个动态的问题,递归到最后只剩下最简单的求解时。就可以返回了。其关键点在于递归的表达式

分治的主要思想:

1.原问题可以分解为多个子问题来求解

2.子问题相互独立

3.子问题的解可以合为原问题的解

不可再分就求解

1.青蛙跳台问题

感觉青蛙跳台问题更像是递归来寻找可行解(通路)的问题。通过递归将底层的f(n-2)的答案汇集起来形成f(n-1)的答案。其递归表达式f(n)=f(n-1)+f(n-2)。当递归到最后,只有0,1,2三种情况时,可以直接返回此时的条约情况,最后得到解。青蛙跳台问题感觉可以想象成分散出取的路径数。你要做的就是统计其分散出取的路径数量即可。

2.找出伪硬币。找出伪硬币不同于青蛙跳台问题。其递归的表达式为f(n)=f(n/2)+1;return此表达式即可,这个更像是逐步的比较。

3。金块称重问题。金块的块数是2的n次幂,因此可以考虑同找出伪币相同的算法,只不过与之不同的是,金块问题对两个分组都要求解。可以考虑最开始一个袋子里面只有两个金块,然后逐步增加金块的数量每次比较f(n/2)后会返回给f(n)金块的数据,然后由上级的递归来比较得出金块的轻重。指的主义的是下层每次返回给上层的都是一个重一个轻,其递归方程可以考虑为f(n)=f(n/2)*2+2(比较一次轻的,比较一次重的。共两次)

4.残缺棋盘问题

当棋盘个数为2*2*2*2=16时,其可分为4个独立的小方块。并且最后在中间的含有四块的正方形必然会填进去一个三格板。当边长增大时,也可知必然会在中间填入一个三个版。也就是说可以考虑用分治算法,直接在中间的正方形先填入一个三个版。将棋盘分为4个残缺的正方形。采取递归的思想,到最后棋盘上只有残缺的正方形,直接填入三角板即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值