递归: 在函数中调用自身

  • 当要使用递归求某个值得时候就找规律从后面往前面推导

  • 注意: 当外部要接收递归函数的返回值的时候,递归函数里面的执行自身函数前面一点要加上 return 否则会 报错 或者 None -> 前提是要接收递归函数的返回值

  • 如果递归次数太多,就不适合使用递归来解决问题

  • 最大的递归深度默认是997/998,是Python从内存角度出发做的限制

# 解除递归限制

import sys
sys.setrecursionlimit(1000000)
n = 0
def story():
    global n
    n += 1
    print(n)
    story()
story()

  • 递归求和 -> 1 + 2 + 3 + 4 + 5 -> 找规律从后面往前面推导

def plus(num):
    if num <= 1:
        return 1
    else:
        return num + plus(num - 1)

r_data = plus(3)



练习

  • 斐波那契 -> 1, 1, 2, 3, 5, 8, 13 -> 求第n个斐波那契是多少

def fibonacci(num, i=2, p=1, r=1):
    if i >= num:
        return r
    else:
        return fibonacci(num, i=i + 1, p=r, r=p + r)

print(fibonacci(3))

def fib(n):
    if n == 1 or n==2:
        return 1
    return fib(n-1) + fib(n-2)

print(fib(50))

  • 阶乘 -> 1 * 2 * 3 * 4 * 5 * 6 -> 找规律从后面往前面推导

def multiply(num):
    if num <= 1:
        return 1
    else:
        return num * multiply(num - 1)

print(multiply(5))