- 6
- 0
- 约3.3千字
- 约 17页
- 2024-05-30 发布于广西
- 举报
学科竞赛编程艾科思教研研究院C++NOIPNOIIOI
1PARTONE递归概念庙里有个老和尚给小和尚讲故事庙里有个老和尚给小和尚讲故事从前有座山,山里有座庙从前有座山,山里有座庙很久以前,有一则古老而有趣的故事流传至今:
1PARTONE递归概念你会发现甲镜子里有乙镜子的像,乙镜子里有甲镜子的像。而且反反复复,就会产生一连串的“像中像”当你站在甲、乙两面相互面对面的镜子中间时,你会发现什么奇妙的现象吗?
1PARTONE递归算法操作特点:(1)每一步执行动作一样;(2)每调用一次规模缩小;(3)结果通过一步步层层退出。两种情况:函数自己调用自己两个函数之间的相互调用其他条件:有递归边界递归算法:就是一种函数直接或间接地调用自身的算法1234
1PARTONE递归算法voidstory(){cout“从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事,他讲的故事是:”;getchar();//按任意按键听下一个故事story();//调用自身函数}由经典故事到程序设计问题:程序陷入死循环,故事一直重复,请想一想,如何跳出死循环吧!提示:定义一个变量,限定故事函数story()的循环次数
1PARTONE递归的执行过程问第5个学生多少岁?他说比第4个学生大2岁问第4个学生岁数,他说比第3个学生大2岁问第3个学生,又说比第2个学生大2岁问第2个学生,说比第1个学生大2岁最后问第1个学生,他说是10岁学生年龄问题有5个学生坐在一起请问第5个学生多大?
1PARTONE解题思路:要求第五个年龄,就必须先知道第四个年龄,要求第四个年龄,就必须先知道第三个年龄,要求第三个年龄,就必须先知道第二个年龄,要求第二个年龄,就必须先知道第一个年龄,每个年龄都比其前1个学生的年龄大2递归的执行过程age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2递推阶段age(1)=10回溯阶段age(2)=12age(2)=14age(2)=16age(2)=18递归剖析12
1PARTONE递归的执行过程intage(intn){intc;if(n==1){c=10;}else{c=age(n-1)+2;}returnc;}intmain(){coutage(5);retrun0;}算法设计
1PARTONE递归的应用Fibonacci数列的代表问题是由意大利著名数学家Fibonacci于1202年提出的“兔子繁殖问题”引出的一对兔子,从出生满2月起,每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,第n个月有几只兔子?还记得Fibonacci数列的递推公式吗?请你写出公式及边界条件吧!请思考:如何用递归方法实现Fibonacci数列Fibonacci数列
1PARTONE递归的应用#includeiostreamusingnamespacestd;intmain(){inta[1000],n;cinn;a[0]=a[1]=1;for(inti=2;i=n;i++){a[i]=a[i-1]+a[i-2];}couta[n];return0;}递推算法请你写出递归的实现方法吧#includeiostreamusingnamespacestd;intfib(intn){if(n==0){return0;}if(n==1){return1;}else{returnfib(n-1)+fib(n-2);}}intmain(){intn;cinn;coutfib(n);return0;}
1PARTONE递归的应用Hanoi塔问题还记得Hanoi塔的递推公式吗?请你写出公式及边界条件吧!请思考:如何用递归方法实现Hanoi塔
1PARTONE递归的应用#includeiostreamusingnamespacestd;voidmove(intn,charX,charZ,charY){//如果n=0,则退出,即结束程序if(n==0){return;}//用Z柱作为协助过渡,将X柱上的n-1片移动到Y柱上move(n-1,X,Y,Z);k++;//统计需要移动的次数coutk“:”X“-?”Zendl;//用X柱作为协助过渡,将Y柱上的n-1片移动到Z柱上move(n-1,Y,Z,X);}intmain(){cout“n=”;cinn;mov(n,’a’,’c’,’b’);return0;}Hanoi塔问题递归原理:通过函数自身调用实现多次[X,Y,Z]移动为[Z,Y,X]
1PARTONE递归的应用台阶问题
原创力文档

文档评论(0)