码迷,mamicode.com
首页 > 编程语言 > 详细

汉诺塔递归算法

时间:2018-07-29 21:11:46      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:依次   +=   ret   pre   输出   time   移动   coding   oba   

# -*- coding:utf-8 -*-
# author : Keekuun

"""
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:

每次只能移动一个圆盘;

大盘不能叠在小盘上面。

"""

time = 0


def mov(n, a, b, c):
    global time
    # 当只有一个圆盘时
    if n == 1:
        print(a, ‘-->‘, b)
        time += 1
    # 当有n个圆盘时
    else:
        # n = (n-1)+1,先移动n-1个圆盘到B
        mov(n - 1, a, c, b)
        # 把最大的圆盘1直接移到C
        mov(1, a, b, c)
        # 再把n-1个圆盘从B移到C
        mov(n - 1, b, a, c)
    return time


print(mov(1, ‘A‘, ‘B‘, ‘C‘))
print(‘*‘*10)
print(mov(2, ‘A‘, ‘B‘, ‘C‘))
print(‘*‘*10)
print(mov(3, ‘A‘, ‘B‘, ‘C‘))
print(‘*‘*10)
print(mov(4, ‘A‘, ‘B‘, ‘C‘))

  输出

A --> B
1
**********
A --> C
A --> B
B --> A
4
**********
A --> B
A --> C
C --> A
A --> B
B --> C
B --> A
A --> B
11
**********
A --> C
A --> B
B --> A
A --> C
C --> B
C --> A
A --> C
A --> B
B --> A
B --> C
C --> B
B --> A
A --> C
A --> B
B --> A
26

 

汉诺塔递归算法

标签:依次   +=   ret   pre   输出   time   移动   coding   oba   

原文地址:https://www.cnblogs.com/zkkysqs/p/9387560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!