递归 python
引入 递归的表现形式 app
下面是四个函数,互相调用返回结果 函数
# 引入 递归的表现形式 def f1(): return '1' def f2(): r = f1() return r def f3(): r = f2() return r def f4(): r = f3() return r result = f4() print(result) # 最后输出结果 1
除了依次调用其余函数,函数也能够调用本身spa
下面的f1()函数一直在调用本身,至关于一个死循环,python内部有机制,当递归调用到必定数量的时候就会报错中止调用了。 code
1 def f1(): 2 f1() 3 4 f1() 5 6 # 报错: RecursionError: maximum recursion depth exceeded
经典的递归用法有斐波那契数列: blog
1 # 递归的典型应用,斐波那契数列 2 def fib(x, y): 3 4 if x + y > 1000: 5 return 6 z = x + y 7 fib_list.append(z) 8 fib(y, z) 9 return fib_list 10 11 fib_list = [0, 1] 12 result = fib(0, 1) 13 print(result) 14 # 获得结果:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
斐波那契数列加上循环的次数限制:递归
1 # 执行了10次后斐波那契数列的结果 2 3 def fib_counts(counts, x, y): 4 if counts == 11: 5 return fib_list 6 z = x + y 7 fib_list.append(z) 8 r = fib_counts(counts + 1, y, z) 9 return r 10 11 fib_list = [0, 1] 12 result = fib_counts(1, 0, 1) 13 print(result) 14 # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
注意:继续调用函数要有一个返回值来return io
课堂失败案例: class
1 def num(a, b, n): 2 if n == 10: 3 return a 4 c = a + b 5 num(b, c, n+1) 6 return a 7 s = num(0, 1, 1) 8 print(s) 9 # 上面的num(b, c, n+1) 没有返回,直接返回了传入的最原始参数a 结果为0 10 # 由于下一次执行的函数拿到数值后要往上一层传递,可是上一层没有接收的地方,等于无用功 11 12 13 # 修改为以下便可: 14 def num(a, b, n): 15 if n == 10: 16 return a 17 c = a + b 18 r = num(b, c, n+1) 19 return r 20 21 s = num(0, 1, 1) 22 print(s) 23 # 结果返回34
补充:循环
汉诺塔递归