1汉诺塔问题:
#include <iostream>
using namespace std;
void hanoi(int n,char x,char y,char z);
void move(int n,char x,char z);
int main(){
char a='A',b='B',c='C';
hanoi(3,a,b,c);
return 0;
}
void hanoi(int n,char x,char y,char z){
if(n == 1){
move(1,x,z);
return;
}
else{
hanoi(n-1,x,z,y);
move(n,x,z);
hanoi(n-1,y,x,z);
}
}
void move(int n,char x,char z){
cout << x << "->" << z << endl;
}
对应的递归树:(很好的帮助理解递归工作栈原理的工具)
递归工作栈:
2.全排列
#include <iostream>
using namespace std;
#define N 3
int a[N]={1,2,3};
void swap(int i,int j);
void perm(int a[],int begin,int end);
int main(){
perm(a,0,2);
return 0;
system("pause");
}
void perm(int a[],int begin,int end){
int i,j;
if(begin == end){
for(i = 0; i < N; i++){
cout << a[i] << " ";
}
cout << endl;
return;
}
else{
for(j = begin; j <= end; j++){
swap(begin, j);
perm(a, begin+1, end);
swap(begin, j);
}
}
}
void swap(int i,int j){
int tmp;
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
对应的递归树: