3行核心代码解决汉诺塔问题(C++递归实现)

xiaoxiao2021-02-28  90

3行核心代码解决汉诺塔问题(C++递归实现)

问题描述:一共有3个柱子,分别是ABC柱,将count个碟子从A柱移动到C柱,请输出详细的移动步骤


先上完整的代码,复制过去直接编译运行即可输出结果。

#include <iostream> using namespace std; void move( int count , char start , char finish , char temp) { if( count == 0 ) return; move ( count-1, start, temp, finish); cout << "把"<< count << "号碟子从" << start << "柱移动到" << finish << "柱" << endl; move ( count-1, temp, finish, start); } int main() { move (3,'A','C','B'); cout << "完成移动!" << endl; }

现在讲讲递归函数void move( int count , char start , char finish , char temp)

这个函数有四个参数,分别是: count:移动的碟子的个数 start:起始柱子 finish:目标柱子 temp:用来辅助的柱子

·递归结束条件:

if( count == 0 ) return;//意思是如果柱子上没有碟子了,那么递归结束。

·核心代码,一共3行,每一行都代表一个动作。

move ( count-1, start, temp, finish); cout << "把"<< count << "号碟子从" << start << "柱移动到" << finish << "柱" << endl; move ( count-1, temp, finish, start);

在这里,我们将碟子的移动分为三部分,对应的就写出了3行代码。

我们先从宏观上考虑,如果我们要把100个碟子从A移动到C,那么可以分成3步

1.先把99个碟子从A移动到B 2.然后把最后一个碟子从A移动到C 3.最后,我们把那99个碟子从B移动到C

这看起来就像是把大象塞进冰箱一样简单。

对应到我们刚才写下的3行代码,第一行就是刚才的第一步,第二行是第二步,第三行是第三步。


比如最开始的代码中的第12行,将3个碟子从A移动到C,B是辅助柱子

move( 3 , 'A' , 'C' , 'B' );
转载请注明原文地址: https://www.6miu.com/read-75223.html

最新回复(0)