首页 > 其他 > 详细

递归之汉诺塔

时间:2018-02-06 19:10:16      阅读:221      评论:0      收藏:0      [点我收藏+]

递归的定义:

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

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

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

递归满足的三个条件:

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"); 
}

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

递归之汉诺塔

原文:https://www.cnblogs.com/Aidongshu/p/8423210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!