3.3 栈与递归的实现
用递归解决问题:
递归的实现依靠着栈,栈顶作为记录包含返回地址,以及所有实参
hanoi塔问题:规则:三个塔座,n个圆盘
// 错误出现在哪里?
#include <stdio.h>
void hanoi(int n , char x , char y ,char z){
void move(char x , int n , char z){
printf("将%d个圆盘由%c柱移至%c柱", n , x,z);
}
if(n == 1){
move(x ,1 ,z );
}
else{
hanoi( n-1 , x, z , y);
move(x , n,z);
hanoi(n-1 ,y , x , z);
}
}
int main()
{
int n = 3;
char x = "1柱";
char y = "2柱";
char z = "3柱";
hanoi( n , x ,y , z);
return 0;
}
//见c3.1程序
递归与栈的关系:每一次进入递归就增加一个栈顶,并存储参数与地址;每一次退出递归就删去一个栈顶,并删去存储参数与地址;