Hanoi塔问题

算法期末备考-第7练-递归与分治

 

请观察上图即可,图片所显示其实就是我们处理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 }
递归计算汉诺塔

相关文章:

  • 2021-10-31
  • 2021-06-28
  • 2021-10-07
  • 2022-12-23
  • 2021-06-03
  • 2022-12-23
猜你喜欢
  • 2021-12-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案