算法基础(三):递归(二)

慕课:程序设计与算法(二)算法基础 郭玮老师课程的学习笔记

递归进阶运算,继续递归(一)难度提升

1、四则运算表达式计算


表达式本身就是一个递归的定义,表达式由符号和项组成,项又由因子和符号组成,因子由括号表达式和整数组成



所以表达式可以进行递归分析



表达式由项(+、-&项)组成,即如果项后还有项需要调用项方法term_value求项的值


而项里读取因子,项由多个因子和*、/组成,看是否有后续因子需要处理,即more来表示还没有*、/,即是否需要继续处理,如果需要则调用factor_value


因子又由括号表达式和整数组成,如果是表达式又需要调用表达式求值,如果是整数直接计算

因子有两种情况,一种是数字,一种是括号加表达式,所以需要用cin.peek()来看输入流的第一个,不取走

数字则按照十进制,result乘10+数;如果是括号表达式,则用表达式进行计算结果,调用expression_value()

即表达式、项、因子分别调用,组成一个递归形式

2、上台阶


爬楼梯分成两种情况,即走一级或走两级,所以将每种情况分为两部分,从第一步开始,第一步走一级+n-1步,第一步走两级+n-1步,n-1步中第一步又可以分为两种情况,以此类推,总之每次走都有两种情况

边界限制无穷递归的发生,一定要在递归函数中设置递归和边界条件,边界即停止的条件,通过判断可以发现,n可以分为小于0和0,或者0和1,或者1和2等情况,因为每次都计算n-1和n-2所以,要判断最后终止的情况


问题分解,第一步该怎么做根据第一步的做法来分类,剩下的问题就是子问题,子问题跟第一个问题形式相同只是数更少,

还要设置边界条件,即停止的条件,避免无穷递归的发生

3、放苹果


当盘子数大于苹果数,即i个苹果放在k个盘子上,等价于把空盘子都排除,将i个苹果放在i个盘子上

当盘子数小于苹果树,分为两种情况,盘子有空和盘子没空

如果有盘子为空,则等价于把i个苹果放到k-1个盘子,即排除空盘子

如果没有盘子为空,则可以每个盘子先放一个苹果,即每个盘子肯定至少有一个苹果,再分剩下的,则等价于i-k个苹果放到k个盘子的放法


边界条件为:

当没有苹果时,方法为1

当盘子为0时,方法为0

根据每次n-1和m-n来判断,边界条件

递归:

当盘子大于苹果时,将空盘子放一边,等价于将m个苹果放在m个盘子上

其余每种情况分为两种,盘子有空和盘子没空两种

4、算24


边界条件即剩一个数,一个数我们就可以直接判断是不是等于24

除法会造成浮点数,这时不能用==,而要用两个数的差是否小于一个很小的值


辅助的函数,即判断是否等于24和判断浮点数是否为0


枚举所有两个数的计算的可能的计算情况,当两个数是+时,再枚举剩下的数中两个数+的情况,以此类推,把每两个数的计算过程进行枚举,只要有一种情况满足即可,不需计算所有情况




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值