C语言函数递归调用汉诺塔问题
#include<stdio.h>intmain(){voidhanoi(intn,charone,chartwo,charthree);intm;printf("inp...
#include <stdio.h>
int main()
{
void hanoi(int n,char one ,char two,charthree);
int m;
printf("input the number of diskes:\n");
scanf("%d",&m);
printf("The step to move %ddiskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one ,char two,charthree)
{
void move(char x,char y);
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
printf("%c->%c\n",x,y);
}
/////////////////////////////////////////////////////////////////////分割线///////////////////////////////////
我现在理解函数可能陷入一个误区了,就拿这题来说。hanoi函数内部没有一条语句是起作用的。什么意思,比如我假定一个新函数add:
Int add(int a,int b)
{
Int c;
c=a+b;
return c;
}
这个函数我通过c=a+b;这条语句很明显就知道了这是执行相加运算的函数。但是反观这道题,hanoi直接就是个空函数,里面一条起作用的语句都没有,怎么就能运算出结果,这点让我非常的头疼。而且在hanoi函数中又调用了hanoi函数,我知道这是递归。但是这函数里面是空的啊。
void hanoi(int n,char one ,char two,charthree);这只是单纯的定义函数变量,没有具体功能。只是说理解的时候可以理解成:将n个盘子从one通过two移动到three。但计算机不会这么理解。它是怎么通过hanoi空函数实现功能的,这点才是我最想,也是最迷糊的地方,希望你能帮我指点迷津 展开
int main()
{
void hanoi(int n,char one ,char two,charthree);
int m;
printf("input the number of diskes:\n");
scanf("%d",&m);
printf("The step to move %ddiskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one ,char two,charthree)
{
void move(char x,char y);
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
printf("%c->%c\n",x,y);
}
/////////////////////////////////////////////////////////////////////分割线///////////////////////////////////
我现在理解函数可能陷入一个误区了,就拿这题来说。hanoi函数内部没有一条语句是起作用的。什么意思,比如我假定一个新函数add:
Int add(int a,int b)
{
Int c;
c=a+b;
return c;
}
这个函数我通过c=a+b;这条语句很明显就知道了这是执行相加运算的函数。但是反观这道题,hanoi直接就是个空函数,里面一条起作用的语句都没有,怎么就能运算出结果,这点让我非常的头疼。而且在hanoi函数中又调用了hanoi函数,我知道这是递归。但是这函数里面是空的啊。
void hanoi(int n,char one ,char two,charthree);这只是单纯的定义函数变量,没有具体功能。只是说理解的时候可以理解成:将n个盘子从one通过two移动到three。但计算机不会这么理解。它是怎么通过hanoi空函数实现功能的,这点才是我最想,也是最迷糊的地方,希望你能帮我指点迷津 展开
7个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询