Hanoi塔问题
请观察上图即可,图片所显示其实就是我们处理hanoi塔的三步。
(注意:图片事网上找来的,汉诺塔问题是从 “A” 借助 “C” 转移到 “B” )
假设f(x) : 把x个盘子 全部从A借助C转移到B时 所用的步数。
以上图举例子。
1、首先先把4个盘子通过B转移到C 操作步数为:f(4)
2、然后把最底层的盘子(编号为5)移动到B 操作步数为:1
3、最后把4个盘子通过A转移到B 操作步数为:f(4)
通过上述例子:
可得到:f(5) = 2*f(4)+1
随着盘子的增多,问题其实仅仅是从底层多加了delta层,但解决的步骤依旧一样。
递归计算
1 #include<iostream> 2 using namespace std; 3 4 int Hanoi(int x){ 5 if( x == 1 ) 6 return 1 ; 7 else 8 return Hanoi(x-1) * 2 + 1 ; 9 } 10 int main() 11 { 12 int n ; 13 cin >> n ; 14 cout << Hanoi(n) << endl ; 15 return 0; 16 }