各位大家好,本来这一期的博客是想更新二叉树的,但是我在写二叉树的时候遇到一个算法就是递归算法,今天我们就来学习一下数据结构的递归算法,所谓的递归算法其实就是自己调自己的一个算法,我们通过一个最经典的问题汉诺塔的问题来具体数说一下递归,什么是汉诺塔呢,汉诺塔就是有三个柱子,这些柱子上边有若干个圆盘,由小到大依次排列,我们需要将这些圆盘完完整整的从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;
}
汉诺塔是递归的经典案例,不出意外的话下一章就是二叉树了,二叉树的插入数据中就有一个递归插入,所以我在这里记录一下递归算法,如有错误欢迎各位码农们指正