| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1938 人关注过本帖
标题:关于汉诺塔的程序
只看楼主 加入收藏
johnzsj
Rank: 2
等 级:论坛游民
帖 子:54
专家分:27
注 册:2017-2-10
结帖率:93.75%
收藏
已结贴  问题点数:20 回复次数:7 
关于汉诺塔的程序
请问汉诺塔当n==1时为什么它又变成了a,b,c不是重新给他赋值了吗?
程序如下:
#include<stdio.h>

void hannuota(int n,char A,char B,char C)
{
    if(n==1)
    {
        printf("将编号为%d的盘子直接从%c柱子移动到%c柱子\n",n,A,C);
    }
   
    else
    {
        hannuota(n-1,A,C,B);
        
        printf("将编号为%d的盘子直接从%c柱子移动到%c柱子\n",n,A,C);
        
        hannuota(n-1,B,A,C);   
    }

}

int main()
{
    int n;
   
    char ch1='E';
   
    char ch2='F';
   
    char ch3='G';
   
    printf("请输入要移动盘子的个数:");
   
    scanf("%d",&n);
   
    hannuota(n,ch1,ch2,ch3);
   
    return 0;
}
搜索更多相关主题的帖子: include 
2017-03-01 21:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:1 
但是……ABC里面的内容会不同耶~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-01 21:02
johnzsj
Rank: 2
等 级:论坛游民
帖 子:54
专家分:27
注 册:2017-2-10
收藏
得分:0 
回复 2楼 九转星河
但是执行到n==1的时候他会变成一样的,你可以复制调试一下,实在想不明白
2017-03-01 21:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
递归就有点类似“死循环”  所以一定要有一个终止这个“循环”并退出的条件

而本题目里的
if(n==1)
    {
        printf("将编号为%d的盘子直接从%c柱子移动到%c柱子\n",n,A,C);
    }
就是递归终止的条件

DO IT YOURSELF !
2017-03-01 21:31
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:2 
回复 3楼 johnzsj
对哦~当n==1的时候是一样的~上楼已经说了那个是递归终止条件~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-01 21:43
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:1 
请问汉诺塔当n==1时为什么它又变成了a,b,c不是重新给他赋值了吗?

这句话什么意思?哪个被重新赋值?
2017-03-01 22:36
johnzsj
Rank: 2
等 级:论坛游民
帖 子:54
专家分:27
注 册:2017-2-10
收藏
得分:0 
回复 6楼 yangfrancis
就是执行到hannuota(n-1,A,C,B);这一句时不是给形参赋值了吗,但当n-1为1时,形参的值就又变成了a,b,c
2017-03-02 08:29
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:11 
#include<stdio.h>        
void hanoi(int N,char A,char B,char C)        
{        
    if(N==1)/*将A座上剩下的第N个盘子移动到C座上*/   
        printf("move dish %d from %c to %c\n",N,A,C);/*打印移动步骤*/
    else   
    {   
        hanoi(N-1,A,C,B);/*借助C座将N-1个盘子从A座移到B座*/
        printf("move dish %d from %c to %c\n",N,A,C);/*打印移动步骤*/
        hanoi(N-1,B,A,C);/*借助A座将N-1个盘子从B座移到C座*/
    }   
}        
main()        
{        
    int n;   
    printf("Please input the nuber of dishes;");   
    scanf("%d",&n);/*输入要移动的盘子个数*/   
    printf("The steps to move %2d dishes are:\n",n);   
    hanoi(n,'A','B','C');/*调用递归函数*/   
}        


Please input the nuber of dishes;3
The steps to move  3 dishes are:
move dish 1 from A to C
move dish 2 from A to B
move dish 1 from C to B
move dish 3 from A to C
move dish 1 from B to A
move dish 2 from B to C
move dish 1 from A to C
Press any key to continue

Please input the nuber of dishes;4
The steps to move  4 dishes are:
move dish 1 from A to B
move dish 2 from A to C
move dish 1 from B to C
move dish 3 from A to B
move dish 1 from C to A
move dish 2 from C to B
move dish 1 from A to B
move dish 4 from A to C
move dish 1 from B to C
move dish 2 from B to A
move dish 1 from C to A
move dish 3 from B to C
move dish 1 from A to B
move dish 2 from A to C
move dish 1 from B to C
Press any key to continue

2017-03-02 14:22
快速回复:关于汉诺塔的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015511 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved