您的位置:首页 > 其它

递归与调用栈工作原理-典型递归例题实现

2015-07-08 17:48 239 查看
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
={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;
}


对应的递归树:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: