我是一个蒟蒻,我想知道知道,了解了解,各位路过的大佬对递归在计算机中的运算过程,让我们引入一道题,来看看。
汉诺塔问题(匹诺曹问题)
输入一个正整数n,求n阶汉诺塔最少移动方案。(即将A上的碟子,放到C上(总共只有ABC三个棍子))
底下是本人代码:
#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char a,char c,char b){
if(n==1) printf("%c-%d->%c\n",a,n,c);
else{
hanoi(n-1,a,b,c);
printf("%c-%d->%c\n",a,n,c);
hanoi(n-1,b,c,a);
}
}
int main(){
int n;char a='A',b='B',c='C';
scanf("%d",&n);
hanoi(n,a,c,b);
return 0;
}
但我看这个代码,觉得输出的肯定是A-1->C,但如果输入4,答案是A-1->B。所以我用了最传统的方法去判断,如下:
#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char a,char c,char b){
if(n==1) printf("%c-%d->%c\n",a,n,c);
else{
cout<<a<<' '<<b<<' '<<c<<endl;
hanoi(n-1,a,b,c);
printf("%c-%d->%c\n",a,n,c);
hanoi(n-1,b,c,a);
}
}
int main(){
int n;char a='A',b='B',c='C';
scanf("%d",&n);
hanoi(n,a,c,b);
return 0;
}
发现输入4时,答案为:
3
A B C
A C B
A-1->C
A-2->B
C-1->B
A-3->C
B A C
B-1->A
B-2->C
A-1->C
我惊奇的发现我函数中的ABC在不断变化,吓得我一阵慌,希望各位大佬给我解解忧!!!