第03讲栈和队列补充知识递归(1081KB).pptxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法(Java+C) 补充知识 :递归 生活中递归的例子 经典例子(斐波拉契数列) 有这样一个有趣的“兔子问题”:“假定一对大兔子每月能生一对小兔子,且每对新生的小兔子经过一个月可以长成一对大兔子,如果不发生死亡,且每次均生下一雌一雄,问一年后共有多少对兔子?” 第一个月是最初的一对兔子生下一对兔子,共有2对兔子;第二个月仍是最初的一对兔子生下一对兔子,共有3对兔子;到第三个月除最初的兔子新生一对兔子外,第一个月生的兔子也开始生兔子,因此共有5对兔子。。。。 经典例子(斐波拉契数列) 斐波拉契数列 public static void main(String[] args) { int[] a=new int[13]; a[0]=1; a[1]=1; System.out.print(a[0]+ +a[1]+ ); for(int i=2;i13;i++){ a[i]=a[i-1]+a[i-2]; System.out.print(a[i]+ ); } 经典例子(斐波拉契数列) 递归实现 public static int Fbi(int n){ if(n==1 || n==2) return 1; return Fbi(n-1)+Fbi(n-2); } public static void main(String[] args) { for(int i=0;i13;i++){ System.out.print(Fbi(i)+ ); } 递归的定义 递归的定义 递归就是一个方法直接或者间接地调用自身 递归是解决复杂问题的重要方法 原理 递归的思想就是数学上递推的思想 把大任务讲解为与之类似的规模更小的任务 数学上叫: 降阶 斐波拉契数列 1,1,2,3,5,8,13,21,34,…… f(10)=f(9)+f(8) f(9)=f(8)+f(7) f(8)=f(7)+f(6) f(7)=f(6)+f(5) f(6)=f(5)+f(4) f(5)=f(4)+f(3) f(4)=f(3)+f(2) f(3)=f(2)+f(1) f(2)=1 f(1)=1 迭代终有终止时! 递归执行的过程: public static int Fbi(int n){ if(n==0) return 0; if(n==1) return 1; return Fbi(n-1)+Fbi(n-2); } 体会递归的思考方法 for(int i=0;i10;i++){ System.out.print(i+ ); } 递归的思想: 如果有人替我打印0~8, 我自己打印一个9,那不就完成了 递归的误区 忘记了设计出口 必然会在某个条件下不在递归 递归方法中必有选择语句 调用栈 后进先出的一种数据结构 目的:沿原路返回 入栈和退栈 函数调用好比我们做一件事情的过程,暂时中断,去处理更紧急的事,然后还要回到原处继续 写作业的时候,肚子饿了 吃东西的时候,电话铃声响了 接电话的时候,有人敲门 递归练习 求n!的值 非递归的算法实现 递归算法实现 public static int f(int n) {     if (n == 1)          return 1;     else          return n*f(n-1);       }   汉诺塔的递归算法 递归过程 第一步:将a塔座上面的n-1个盘子从a塔座借助于c塔座移动到b塔座上 第二步:将剩余的那个盘n盘从a塔座移动到c塔座 第三步:将b塔座上面的n-1个盘子借助于a塔座移动到c塔座上 汉诺塔的简单实现 /** * 递归函数,用来遍历hanoi步骤 */ public static void hanioSort(int num ,String a ,String b ,String c){ if(num == 1){ move(num,a,c); } else{ hanioSort(num-1, a, c, b); move(num,a,c); hanioSort(num-1, b, a, c); } } public static void move(int num ,String a,String b){ step ++ ; System.out.println(第+step+步,盘子+num+从+a+塔移到+b+塔);

文档评论(0)

精品课件 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档