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

原创 2018年04月15日 23:13:03

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

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

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


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




程序设计与算法(二)算法基础_北京大学 学习笔记(一)

第一周 枚举 所有题目用python实现 例题1 完美立方N=int(input ('N=')) for a in range(3,N+1): for b in range(2,a): ...
  • chucksonwheel
  • chucksonwheel
  • 2017-12-05 11:05:13
  • 205

[算法入门经典] 7.5.3 八数码问题 | HDU 1043

这个游戏小时候玩过,在书上看到
  • x_iaow_ei
  • x_iaow_ei
  • 2014-06-04 16:58:50
  • 800

二阶段提交和三阶段提交算法的理解

一、二阶段提交算法的描述: 二阶段提交算法的成立基于以下假设: 该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts)。且节点之间可以进...
  • lxpblsc
  • lxpblsc
  • 2015-03-29 11:48:27
  • 2319

递归-小游戏(算法基础 第3周)

问题讲解: 源码:#include #include #define MAXIN 75char board[MAXIN+2][MAXIN+2]; //定义矩形板 int mi...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2016-06-06 00:11:14
  • 756

三大算法总结

一。分治: 基本思想:       将一些难以解决的大问题分割成规模较小的相同问题,对于一个问题规模为n的问题,如果能直接解决,则解决,否则将其拆开, 分治法适用的情况   分治法...
  • ivysister
  • ivysister
  • 2016-03-05 20:50:04
  • 738

NCRE二级公共基础部分

  • 2008年10月04日 15:00
  • 162KB
  • 下载

算法基础--递归

递归: 将问题分解成相似的子问题 递归函数:内存中开辟了大量函数栈 汉诺塔: 化简:将n个从a移动到c写成:Hanoi(n,a,b,c) 将n-1个从a移动到b:Hanoi(n-1,a,c,b)/...
  • sinat_28128937
  • sinat_28128937
  • 2017-10-28 11:46:30
  • 70

[coursera算法初步]递归_棋盘分割问题

将一个8*8的棋盘进行如下分割: 将原棋盘割下一块矩形棋盘并使剩下部分也是矩形, 再将剩下的部分继续如此分割, 这样割了(n-1)次后, 连同最后剩下的矩形棋盘共有n块矩形棋盘. (每次切割都...
  • grfcj
  • grfcj
  • 2017-09-25 04:13:58
  • 163

三帧差分算法

本文系转载,原文地址:http://blog.csdn.net/carson2005/article/details/42218701 int CallTime = 0;//定义调用次数计...
  • atpccb
  • atpccb
  • 2016-04-27 11:13:54
  • 1412

递归基础之放苹果

递归基础之放苹果
  • Dorlife
  • Dorlife
  • 2017-04-29 16:15:04
  • 473
收藏助手
不良信息举报
您举报文章:算法基础(三):递归(二)
举报原因:
原因补充:

(最多只允许输入30个字)