当前位置: 首页> 娱乐> 明星 > 深圳市企业网站seo联系方式_明星网页设计范例_seo 是什么_百度百科推广联系方式

深圳市企业网站seo联系方式_明星网页设计范例_seo 是什么_百度百科推广联系方式

时间:2025/7/15 2:33:42来源:https://blog.csdn.net/2402_86350741/article/details/143058061 浏览次数:0次
深圳市企业网站seo联系方式_明星网页设计范例_seo 是什么_百度百科推广联系方式

 

285b9f52d76e44c4a4d7c3838a19ab5d.png

这俩道题都是利用到了函数递归的思想,其中汉诺塔问题较难理解,青蛙跳台阶则较简单

汉诺塔问题

题述:

设有三根柱子分别时A,B,C,在A柱子上放着n个盘子,每个盘子大小不一样,从下往上盘子大小依次减小,要求将A柱子上的盘子移动到C柱,且不改变盘子顺序(由大往小排序)。

规则:

1.一次只能移动一个盘子

2.盘子可以放在任意一个柱子上

3.盘子由大到小排序

 

图解:当n=2时,

移动顺序:A->B,A->C,B->C

b335b820c15b4811a0904f98eb6d9295.png

当n=3时

A->C,A->B,C->B,A->C,B->A,B->C,A->C

f25b778770d34347882010eb9421a5ba.png

 

思路:可以用函数递归来解决汉诺塔问题

代码插入

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>void move(char pos1, char pos2)
{printf(" %c->%c ", pos1, pos2);}
//n是汉诺塔的层数
//pos1起始位置
//pos2中转位置
//pos3目的位置void Hanoi(int n,char pos1,char pos2,char pos3)
{if (n == 1){move(pos1, pos3);//这个move(pos1,pos3)对应的Hanoi中的pos1,pos3}else{//将n-1杆子上的东西从A经过中转杆C移动到B上Hanoi(n - 1, pos1, pos3,pos2);//将A上的东西移动到C上move(pos1, pos3);//将B杆子上的东西通过中转杆A移动到C上。Hanoi(n - 1, pos2, pos1, pos3);}}int main()
{/*Hanoi(2, 'A', 'B', 'C');printf("\n");Hanoi(2, 'A', 'B', 'C');printf("\n");*/Hanoi(3, 'A', 'B', 'C');printf("\n");return 0;}

函数递归图

n==2时的

c677fd2c5511456db340e4c5cf50ab17.png

注意:

上面的,Hanoi(1,A,C,B)和Hanoi(1,B,A,

C)都是这个分支👇

c9ae11fa78db47e1ae224f36799ab7af.png

它是代码执行顺序执行的(仔细理解)

代码执行流程👇

先进入

aedc53d4ea1a40199249c46a0b3179c9.png

然后进行函数调用

349d0c5a6bd9470ebea45a10ba0ad18c.png

此时pos1=A,pos2=B,pos3=C

然后进入else内部

7d9ac43cfed7479cb0a2ad527cd509f3.png

此时Hanoi(1,A,C,B)

然后这个函数进行函数调用,此时

Hanoi(1,A,B,C),此时n==1,进入if语句里头

所以move(A->B)

这个函数Hanoi(1,A,C,B)用完后,往下进行

2757f224fb0c46bd9a5ee42a2aaab053.png

然后move(A->B)

然后进入到3f45f11e3aed46d49e680e7901967e31.png

上面的代码执行完,并没有改变n的值,所以n依旧==2

此时Hanoi(1,B,A,C)

n==1进入if语句中

然后move(B->C).

然后程序结束

运行结果

62b8ec7b707f4fb990d6f5fdfbfecc66.png


n==3时,函数递归图

4ac5cc7287a34750845ae7474d469c1e.png

a9b26512fc034f92a5aeb67fccc7f434.png

圈1代表着这个函数调用后的结果👇

85a5a276df764bfc89a48cb1e52eb1ac.png

中间的move到了这个代码行

51da7a306cd14d58a6e460fd34dc4f91.png

圈2是这个函数调用后的结果👇

fb31d15a889a4da5bbf8a0ade1418974.png

然后得到程序结果

 


青蛙跳台阶问题

题述:

有一只青蛙跳台阶,一次可以跳1次,也可以跳2次,问跳到了第n个台阶,可以有多少种跳法

思路:这道题与斐波那契求解差不多

n==1时,way==1

n==2时,way==2

n==3时,way==3

n==4时,way==5

此时即可找到规律,

当n>2时

f(n)=f(n-1)+f(n-2)

那么这道题就是一个典型的函数递归问题

int Way(n)
{if (n == 1 ){return 1;}else if (n == 2){return 2;}elsereturn Way(n - 1) + Way(n - 2);
}int main()
{int n = 0;scanf("%d", &n);int result = Way(n);printf("%d", result);return 0;
}

程序运行

7c6d2039340f4a0698568c34f24153e8.png

 

结语:限于水平,本篇文章不足之处在所难免,若大家发现问题,大家可以指正下

 

b38990b0d38f4c77be28a9e25492561e.png

 

 

 

 

 

 

关键字:深圳市企业网站seo联系方式_明星网页设计范例_seo 是什么_百度百科推广联系方式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: