一只青蛙上台阶c语言编程,C语言递归之汉诺塔和青蛙跳台阶问题

递归就是一个函数执行过程中调用自己,在c语言中有很多关于递归的经典问题,例如:斐波那契数列问题、汉诺塔问题等,在研究递归问题时我们要注意三点:

1.递归的结束条件

2.递归在每次进行过程中,都得离条件越来越近

3.相邻两次递归调用之间的关联关系

汉诺塔问题:

有三根杆子A, B, C。A杆上有N个(N > 1)穿孔圆盘, 盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:

1.每次只能移动一个圆盘;

2.大盘不能叠在小盘上面,可将圆盘临时置于B杆, 也可将从A杆移出的圆盘重新移回A杆, 但都必须尊循上述两条规则。求移动的过程。

int step = 0; //设置全局变量step记录步数

void move(int i,char form,char to){

printf("第%d步,将第%d个盘子从%c移动到%c\n", ++step,i,form, to);

}

void Hanio(int n,char a,char b,char c){

if (n == 0)

{

return;

}

Hanio(n - 1,a,c,b); //第n-1个A柱上的盘子通过C柱移动到B柱

move(n, a, c); //将A柱上编号为n的盘子移动到C柱

Hanio(n - 1, b, a, c); //再将B柱上的第n-1个盘子通过A柱移动到C柱

}

int main(){

int n;

printf("请输入汉诺塔中有多少个圆盘:\n");

scanf("%d", &n);

Hanio(n, 'A', 'B', 'C'); //将n个圆盘从A柱通过B柱移动到C柱

system("pause");

return 0;

}

运行结果:

2021040914410037.png

青蛙跳台阶问题:

一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

当n = 1,只有1中跳法;当n = 2时,有两种跳法;当n = 3 时,有3种跳法;当n = 4时,有5种跳法;当n = 5时,有8种跳法。可以总结为f(n)=f(n-1)+f(n-2),本质上与斐波那契数列相同。

int Frog(int n){

if (n <= 2 && n >= 0)

{

return n;

}

else if (n < 0)

{

printf("您的输入错误\n");

return n;

}else

{

return Frog(n - 1) + Frog(n - 2);

}

}

int main(){

int n;

printf("请输入有几级台阶:\n");

scanf("%d", &n);

int result = Frog(n);

if(n >= 0){

printf("青蛙有%d种跳法\n", result);

}

system("pause");

return 0;

}

运行结果

2021040914410038.png

到此这篇关于C语言递归之汉诺塔问题和青蛙跳台阶问题的文章就介绍到这了,更多相关C语言递归汉诺塔青蛙跳台阶内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】

C语言程序中递归算法的使用实例教程

C语言的递归思想实例分析

C语言实现汉诺塔游戏

c语言 汉诺塔算法代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值