C语言递归之汉诺塔和青蛙跳台阶问题

 更新时间:2021年04月09日 14:48:37   作者:一只当归  
这篇文章主要介绍了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;
}

运行结果:

在这里插入图片描述

青蛙跳台阶问题:

一只青蛙一次可以跳上 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;
}

运行结果

在这里插入图片描述

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

相关文章

  • vscode配置C++环境的图文教程

    vscode配置C++环境的图文教程

    这篇文章主要介绍了vscode配置C++环境的教程图文详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • C++如何获取系统信息 C++获取IP地址、硬件信息等

    C++如何获取系统信息 C++获取IP地址、硬件信息等

    这篇文章主要为大家详细介绍了C++如何获取系统信,C++获取IP地址、硬件信息等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • C语言操作XML文件的技术和方法

    C语言操作XML文件的技术和方法

    XML因其灵活性和标准化特性,被广泛应用于数据交换、配置文件、Web服务等领域,C语言作为一种高效、底层的编程语言,在处理XML数据方面也有广泛的应用,本文将深入探讨C语言操作XML的技术和方法,需要的朋友可以参考下
    2025-03-03
  • C语言使用四种方法初始化结构体

    C语言使用四种方法初始化结构体

    这篇文章说明了什么是结构体,介绍了结构体的概念和使用优点,在C语言中如何使用和初始化结构体方法,通过详细的代码展开进行说明,希望该篇文章对你有所帮助
    2021-06-06
  • 基于C语言编写一个简单的抽卡小游戏

    基于C语言编写一个简单的抽卡小游戏

    这篇文章主要为大家介绍了如何利用C语言实现原神抽卡的小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-04-04
  • C++20 统一容器擦除:std::erase 和 std::eraseif的实现

    C++20 统一容器擦除:std::erase 和 std::eraseif的实现

    本文主要介绍了C++20 统一容器擦除:std::erase 和 std::erase_if的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • C++关于Makefile的详解含通用模板

    C++关于Makefile的详解含通用模板

    今天小编就为大家分享一篇关于C++关于Makefile的详解含通用模板,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • [c++]变量声明与定义的规则详解

    [c++]变量声明与定义的规则详解

    这篇文章主要介绍了[c++]变量声明与定义的规则详解,对于学习c++的朋友来说这是一个很细腻的文章,代码完整,需要的朋友可以参考下
    2021-04-04
  • CRITICAL_SECTION用法案例详解

    CRITICAL_SECTION用法案例详解

    这篇文章主要介绍了CRITICAL_SECTION用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C++数据封装以及定义结构的详细讲解

    C++数据封装以及定义结构的详细讲解

    这篇文章主要详细讲解了C++数据封装以及定义结构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论