当前位置:网站首页>【C】青蛙跳台阶和汉诺塔问题(递归)
【C】青蛙跳台阶和汉诺塔问题(递归)
2022-06-26 08:48:00 【心辛向荣】
博客主页:心辛向荣
系列专栏:【从0到1,C语言学习】
一句短话:你若盛开,蝴蝶自来!
博客说明:尽己所能,把每一篇博客写好,帮助自己熟悉所学知识,也希望自己的这些内容可以帮助到一些在学习路上的伙伴,文章中如果发现错误及不足之处,还望在评论区留言,我们一起交流进步!
前言
这篇博客总结递归当中俩个经典的问题,青蛙跳台阶和汉诺塔,用C语言实现!
一.青蛙跳台阶
题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
解题思路:
n=1,跳一个台阶,只有一种跳法;
n = 2,先跳一个台阶,再跳一个台阶,或者直接跳俩个台阶,有俩种跳法;
n>2,青蛙跳第一次时,有俩种可能,即跳一个台阶或者跳俩个台阶,只需要将这俩种情况下的跳法加起来即可,用一个函数fib()实现求青蛙跳上一个 n 级的台阶总共有多少种跳法,那么结果为Fib(n - 1) + Fib(n - 2)。
用递归实现,
代码:
#include<stdio.h>
int Fib(int n)
{
if (n <= 2)
{
return n;
}
if (n > 2)
{
return Fib(n - 1) + Fib(n - 2);
}
}
int main()
{
printf("输入台阶数n = ");
int n = 0;
scanf("%d", &n);
printf("有%d种跳法\n", Fib(n));
return 0;
}
运行结果:

二.汉诺塔
汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照从大到小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?
题目:
这里我们实现这样一个过程,有A、B、C三个柱子,A柱上有n个盘子,将这n个盘子移动到C柱上,用代码实现移动过程并计算要进行多少次移动!
解题思路:
假如n=3,那么这三个盘子的移动过程如下:

首先将A上面的俩个盘子通过C移动到B;

再将A上的盘子移动到C;

再将B上的俩个盘子通过A移动到C;

对于n个盘子,要将其通过B放到C上;
我们首先要实现A最下面的盘子放到C上,那么我们就先实现将A上面的n-1个盘子通过C放到B上,然后再将A上的最后一个盘子放到C上;

再将A上的盘子移动到C;
然后要实现将B上的盘子通过A放到C上,实现过程和上面类似,这个过程封装一个函数进行递归。
对于计算移动的次数,也可以用递归实现,思路如下:
当n = 1时,次数为1;
当n > 1时,
- 计算将n-1个盘子从A通过B移动到C的次数
- 将A上的最后一个盘子移动到C为一次
- 将B上的盘子(n-1个)通过A移动到C
还可以按如下规律去求次数:
- 次数为2 ^ n - 1;
代码实现:
#include<stdio.h>
#include<math.h>
void Hannoi(int n, char A, char B, char C)
{
if (1 == n)
{
printf("%c->%c ", A, C);
}
if (n > 1)
{
Hannoi(n - 1, A, C, B);
printf("%c->%c ", A, C);
Hannoi(n - 1, B, A, C);
}
}
int Count_hannoi(int n)
{
if (1 == n)
return 1;
if(n > 1)
return 2 * Count_hannoi(n - 1) + 1;
}
int main()
{
printf("输入有几个盘子n = ");
int n = 0;
scanf("%d", &n);
Hannoi(n, 'A', 'B', 'C');//打印移动过程
/*printf("\n需要进行%d次移动\n", (int)pow(2,n) - 1);*/ //规律法
printf("\n需要进行%d次移动\n", Count_hannoi(n));//递归法
return 0;
}
运行结果:

结语
各位小伙伴,看到这里就是缘分嘛,希望我的这些内容可以给你带来那么一丝丝帮助,可以的话三连支持一下呗!!! 感谢每一位走到这里的小伙伴,我们可以一起学习交流,一起进步!!!加油!!!

边栏推荐
- 小程序实现图片预加载(图片延迟加载)
- In depth study paper reading target detection (VII) Chinese version: yolov4 optimal speed and accuracy of object detection
- Isinstance() function usage
- dedecms小程序插件正式上线,一键安装无需任何php或sql基础
- Yolov5 advanced 4 train your own data set
- Selenium 搭建 Cookies池 绕过验证反爬登录
- 设置QCheckbox 样式的注意事项
- Yolov5 advanced 5 GPU environment setup
- 1.25 suggestions and design of machine learning
- Solution to the encoding problem encountered by the crawler when requesting get/post
猜你喜欢

Yolov5进阶之四训练自己的数据集

Matlab drawing checkerboard (camera calibration)

Mongodb分片环境搭建和验证(redis期末大作业)

isinstance()函数用法

Yolov5 advanced camera real-time acquisition and recognition

Baidu applet rich text parsing tool bdparse

【开源】使用PhenoCV-WeedCam进行更智能、更精确的杂草管理

phpcms小程序插件api接口升级到4.3(新增批量获取接口、搜索接口等)

phpcms小程序插件教程网站正式上线

Yolov5 advanced 4 train your own data set
随机推荐
Yolov5 advanced level 2 installation of labelimg
20220213 Cointegration
Live review | smardaten lihongfei interprets the Research Report on China's low / no code industry: the wind direction has changed
Efficiency thesis Reading 1
Particles and sound effect system in games104 music 12 game engine
Segmentation of structured light images using segmentation network
框架跳转导致定位失败的解决方法
XSS cross site scripting attack
反爬之验证码识别登录 (OCR字符识别)
修复小程序富文本组件不支持video视频封面、autoplay、controls等属性问题
远程工作的一些命令
XSS 跨站脚本攻击
Isinstance() function usage
百度小程序富文本解析工具bdParse
深度学习论文阅读目标检测篇(七)中文版:YOLOv4《Optimal Speed and Accuracy of Object Detection》
HDU - 6225 Little Boxes(__int128的使用)
Data warehouse (3) star model and dimension modeling of data warehouse modeling
ImportError: ERROR: recursion is detected during loading of “cv2“ binary extensions. Check OpenCV in
phpcms v9去掉phpsso模块
[qnx hypervisor 2.2 user manual]12.2 terminology (II)
