码迷,mamicode.com
首页 > 其他好文 > 详细

递归之汉诺塔

时间:2018-02-06 20:36:00      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:style   else   通过   stdio.h   back   pre   color   clu   include   

递归的定义:

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

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

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

递归满足的三个条件:

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

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

递归之汉诺塔

标签:style   else   通过   stdio.h   back   pre   color   clu   include   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!