问题及代码:
/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:hannuota.cpp
*作 者:单昕昕
*完成日期:2014年11月13日
*版 本 号:v1.0
*
*问题描述:汉诺塔的游戏。
*程序输出:n个盘子的移动步骤。
*/
#include <iostream>
using namespace std;
int move(int n,char A,char B,char C);
int main()
{
int n;
cin>>n; //有n个盘子
move(n,'A','B','C');
return 0;
}
//有n个盘子,
int 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);
}
}
运行结果:
————————————————————————四个盘子——————————————————————————————
————————————————————————三个盘子——————————————————————————————
————————————————————————15个盘子的部分截图——————————————————————————————
知识点总结:
汉诺塔的玩法要知道。
学习心得:
感觉这个函数的技巧性很高啊,真费脑子╮(╯▽╰)╭盘子越多步骤越多,满足函数f(n)=2*f(n)+1.