C语言实现汉诺塔

各位大家好,本来这一期的博客是想更新二叉树的,但是我在写二叉树的时候遇到一个算法就是递归算法,今天我们就来学习一下数据结构的递归算法,所谓的递归算法其实就是自己调自己的一个算法,我们通过一个最经典的问题汉诺塔的问题来具体数说一下递归,什么是汉诺塔呢,汉诺塔就是有三个柱子,这些柱子上边有若干个圆盘,由小到大依次排列,我们需要将这些圆盘完完整整的从a柱移动到c柱,要求是,每次只能移动一个,而且小的盘子必须在大的盘子上边,我们通过图来进一步理解。

上边就是一个有三层的汉诺塔,可以看到我们分为了8步完成了这个塔的移动,这个看着步骤很是繁琐,我们要怎样将其简单化呢,最简单的是什么呢,最简单的就是一层的塔呗,我们需要把a移动到c就好了,这个化简的算法就是递归算法。

        综上所述我们可以得到俩个结论:

                1、递归算法就是自身调用自身

                2、递归算法必须要有结束条件,否则的话就会陷入死循环

递归呢,其实就是一个栈,举个简单的 例子,比如说有一道题是让我们求解10的阶乘,那我们是不是就得先知道9的阶乘,要知道9的阶乘就必须先知道8的阶乘,,,,,,以此类推,那么他的结束条件就是1的阶乘了吧,这个算法写出来较为简单,我们看一看汉诺塔的程序吧。

#include<iostream>
using namespace std;
void hanoi( int n, char a , char b , char c)
{
	if (n == 1)
	{
		cout<<a<<"----"<<c<<endl;
	}
	else if(n > 1)
	{
		hanoi(n-1 , a , c , b);
		cout<<a<<"----"<<c<<endl;
		hanoi(n-1 , b , a , c);
	}
	else
	{
		cout<<"the number is error"<<endl;
	}	
}
int main()
{
	int i = 0;
	cout<<"please inout a number and that is your hanoi number:";
	cin>>i;
	hanoi(i , 'a' , 'b' , 'c');
	return 0;
}

汉诺塔是递归的经典案例,不出意外的话下一章就是二叉树了,二叉树的插入数据中就有一个递归插入,所以我在这里记录一下递归算法,如有错误欢迎各位码农们指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子一个小李

如果觉得有帮助的话,还请打赏呀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值