Tag Archives: 汉诺塔

数据结构重读 – 递归与汉诺塔

堆栈与递归是相辅相成的。

比如Fibnacci数列就是递归定义:

Fib(n) = Fib(n-1) + Fib(n-2) (n>=2) Fib(0) = 0 Fib(1) = 1

Fibnacci数列:1, 1, 2, 3, 5, 8, 13, 21, ....

说到这里再写个Fibnacci的通项公公式:

这个还是很无敌的……

然后再一个例子是书上的Ackerman函数:

 

转回经典的汉诺塔问题:假设有三个命名为X,Y[......]

继续阅读

七层汉诺塔的解法

玩汉诺塔疯狂的可以参考一下了
以下是7层汉诺塔的解法:
把1号从a挪动到c
把2号从a挪动到b
把1号从c挪动到b
把3号从a挪动到c
把1号从b挪动到a
把2号从b挪动到c
把1号从a挪动到c
把4号从a挪动到b
把1号从c挪动到b
把2号从c挪动到a
把1号从b挪动到a
把3号从c挪动到b
把1号从a挪动到c
把2号从a挪动到b
把1号从c挪动到b
把5号从a挪动到c
把1号从b挪动到a
把2号从b挪动到c
把1号从a挪动到c
把3号从b挪动到a
把[......]

继续阅读

《数据结构》递归实现汉诺塔

main.cpp:汉诺塔实现。
思路分析:
若n=1,则只需把盘子从a挪动到c
若n>1,
(1)把前n-1个盘子从a经过c挪动到b
(2)把第n个盘子从a挪动到c
(3)把前n-1个盘子从b经过a挪动回c
实现:
#include <fstream>
#include <iostream>
using namespace std;
ofstream fout("out.txt");
void Move(int n,char x,char y[......]

继续阅读