递归之汉诺塔

Posted 雨滴_爱冬叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归之汉诺塔相关的知识,希望对你有一定的参考价值。

递归的定义:

一个函数自己直接或间接调用自己(一个函数调用另外

一个函数和他调用自己是一模一样的,都是那三步,

只不过在人看来有点诡异。)

递归满足的三个条件:

1、递归必须得有一个明确的终止条件

2、该函数处理的数据规模必须在递减

3、这个转化必须是可解的。

循环和递归:

理论上循环能解决的,肯定可以转化为递归,但是这个

过程是复杂的数学转化过程,递归能解决不一定能转化

为循环,我们初学者只要把经典的递归算法看懂就行,

至于有没有能力运用看个人。

递归:

易于理解

速度慢

存储空间大

循环

不易于理解

速度快

存储空间小

汉诺塔代码:

/*汉诺塔
如果n为1
    把A上面的直接移动到C
否则
    把A上面(n-1)通过C移动到B;
    把A第n个移动到C上;
    再把B上面(n-1)的通过A移动到C上; 
*/ 
#include<stdio.h>

int i = 0;
void hannuota(int n,char A,char B,char C)
{
    if(1 == n)
        printf("%d...把%c最上面的移动到%c\n\n",++i,A,C);
    else
    {
        hannuota(n-1,A,C,B); 
        printf("%d...把%c最上面的移动到%c\n\n",++i,A,C);
        hannuota(n-1,B,A,C); 
    } 
}
int main() 
{ 
    int n;
    printf("请输入盘子的数量:");
    scanf("%d",&n);
    char ch1 = A,ch2 = B,ch3 = C;
    hannuota(n,ch1,ch2,ch3); 
    printf("OVER............................\n"); 
}

把大的数据规模一层一层化小.重要的是思想,代码很简单.

以上是关于递归之汉诺塔的主要内容,如果未能解决你的问题,请参考以下文章

Python函数递归之汉诺塔

汉诺塔之递归学习

从汉诺塔问题来看“递归”本质

java递归思想之---汉诺塔

分治 + 递归之汉诺塔问题详解

递归算法之汉诺塔