Python学习笔记 三:递归操作,实现斐波那契数列和汉诺塔

递归操作

  • 递归:函数间接或者直接调用自己
  • 递归分两个过程:
    • 1.往下调用,分解的过程
    • 2.往上回溯,综合的过程
  • 递归需要注意:
    • 一定要有结束条件***
  • 使用递归的操作,将使程序非常简单、简洁
  • 以资源换取编写速度的算法
def funa(n):
    print("this is amy")

def funcb(n):
    funa(100)
    print("this is csc")
    
funcb(100)

this is amy
this is csc

# fun_a 表示计算阶乘:f(n)=n*f(n-1),n>1

def fun_a(n):
    print(n)
    # 此为结束条件n=1
    if n == 1:
        return 1
    return n * fun_a(n-1)

rst = fun_a(5)
print("f(10) = ", rst)

# 若无结束条件,将无限递归下去,出现RecursionError(递归错误)

5
4
3
2
1
f(10) = 120

斐波那契数列

  • 数学定义:f(n) = f(n-1) + f(n-2), n>2, 第一二位都为:1
def fib(n):
    if n ==1 or n == 2:
        return 1
    return fib(n-1) + fib(n-2)

rst = fib(10)
print("rst = ", rst)

rst = 55

汉诺塔

  • A、B、C三根柱子,有三个盘子在A上,规定每次大的盘子都要在下面,最终将三个盘子移动到C上面
a, b, c = "A", "B", "C"
def hano(a,b,c,n):
    if n == 1:
        print("{} -> {}".format(a,c))
        return None
    
    if n == 2:
        print("{} -> {}".format(a,c))
        print("{} -> {}".format(a,b))
        print("{} -> {}".format(b,c))
        return None
    
    # 将n-1个盘子,借助于c塔移动到b塔上
    hano(a,c,b,n-1)
    print("{} -> {}".format(a,c))
    hano(b, a, c, n-1)
#只有一个盘子
hano(a, b, c, 1)
print()

# 有三个盘子
hano(a, b, c, 3)

A -> C

A -> B
A -> C
C -> B
A -> C
B -> C
B -> A
A -> C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackson的生态模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值