前言
递归学习:经典问题 汉诺塔问题
一、汉诺塔
练习4·代码题
汉诺塔
左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间需要遵循以下原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤。若将A最上面的盘子移动到B上,则可表示为 “A -> B”
输入描述:
一行,一个整数n
输出描述:
若干行,每行代表一次操作
二、代码展示
#include <bits/stdc++.h>
using namespace std;
void move(int n, char A, char B, char C){
if(n == 1) cout<<A<<" -> "<<C<<endl;
else{
move(n-1, A, C, B);
cout<<A<<" -> "<<C<<endl;;
move(n-1, B, A, C);
}
}
int main() {
// 请补全代码,实现题目功能
char A = 'A';
char B = 'B';
char C = 'C';
int n;
cin>>n;
move(n,A,B,C);
return 0;
}
总结
递归采用的是 栈 这一数据结构,先了解栈的规则有利于理解递归的调用