基本递归汉诺塔

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本递归汉诺塔相关的知识,希望对你有一定的参考价值。

**本题来自科创网**

#include<iostream>

using namespace std;


int read()//输入函数,用于获取输入的数字(包括两位数和三位数等)
{
  int x=0,f=1;char ch=getchar();
  while(ch<‘0‘||ch>‘9‘)
  {
    if(ch==‘-‘)
    f=-1;
    ch=getchar();
  }
  while(ch>=‘0‘&&ch<=‘9‘)
  {
    x=x*10+ch-‘0‘;
    ch=getchar();
  }
  return x*f;
}

int n,m,nthstep=0;//n是有多少个盘子,m是第几步,nthstep表示现在已到了第几步

void move(int n,char a,char c,char b)//移动函数将B柱充当过渡柱,将A柱上的n片移动到C柱上
{
  //move函数为递归
  if(n==0)
  return ;//如果盘子被移完了,就结束程序
  move(n-1,a,b,c);//先将A柱上前n-1个盘子移到B柱上,将C柱充当过渡柱
  nthstep++;
  if(nthstep==m)//到达了第m步输出结果,结束程序
  {
    cout<<a<<"-->"<<c;
    exit(0);//break只能用于循环或分支语句
    //exit是在调用处强行退出程序,运行一次程序就结束
  }
  move(n-1,b,c,a);//将A柱作为过渡柱,将B柱上的n-1个盘子移到C柱上
  return ;//结束
}

int main( )
{
  n=read();
  m=read();
  //cin>>n>>m;
  move(n,‘A‘,‘C‘,‘B‘);//将B柱充当过渡柱,将A柱上的n片移动到C柱上
  return 0;
}

原题:http://oj.kechuangedu.com/oj/home/problem.htm?problemID=768

以上是关于基本递归汉诺塔的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔的非递归实现(借助堆栈模拟递归)

python_递归实现汉诺塔

分治算法——汉诺塔问题

汉诺塔递归问提

汉诺塔内存分析(python)

题目1458:汉诺塔III(不一样的汉诺塔递归算法)