第三十天(递归)

今天完成题目:1690,1137,1716 1690:汉诺塔问题

# 先将n-1个移动到缓冲,再将最大一个移到目标
def hanota(n, A, B, C):
    '''
    将A中n个移到C,以B作为缓冲
    '''
    # 若只有一个,直接移入
    if n == 1:
        C.append(A.pop())
        return
    # 将A中n-1个移到B,以C作为缓冲
    hanota(n-1, A, C, B)
    # 将A中剩余最大一个,移到C
    C.append(A.pop())
    # 将B中n-1个移到C,以A作为缓冲
    hanota(n-1, B, A, C)
hanota(len(A), A, B, C)

1137:第 N 个泰波那契数

  • return tribonacci(n-1)+tribonacci(n-2)+tribonacci(n-3)

  • 可以用查表法,将结果记录下来

1716:跳水板

  • 用数学的方法,计算出长短板的差值diff,每次加上差值即为一个结果

1577:青蛙跳水台

  • 发现数字中的规律,本质上类似斐波那契数列,只不过是{1,1,2,3.....}

1576:斐波那契数列

  • 使用查表法,发现字典不一定比list高效.

最后更新于

这有帮助吗?