1. 认识递归
递归就是函数调用自身的过程 给定参数让递归在恰当的时候回归 就实现了控制
def funA(i):
if i > 0 :
print('我爱Python')
i -= 1
funA(i)
funA(10)
2. 递归的优雅 ---- 递归和迭代的比较
① 计算阶乘
采用for循环迭代:
def factIter(n):
result = n
for i in range(1,n):
result *= i
return result
print(factIter(5))
采用递归函数:
def factIter1(n):
if n == 1:
return 1
else:
return n * factIter1(n-1)
print(factIter1(5))
② 计算斐波那契数列项数对应的值
采用while循环迭代:
def fib(n):
a = 1
b = 1
c = 1
while n > 2:
c = a + b
a = b
b = c
n -= 1
return c
print(fib(12))
采用递归函数:
def fib1(n):
if n == 1 or n == 2:
return 1
else:
return fib1(n-1) + fib1(n-2)
print(fib1(12))
总结 :可以看到递归函数相较于迭代,显得更加优雅,更加接近于我们对一个问题的直白描述。
但是,递归的 ‘副作用’ 则是效率较低,每一次调用递归函数并不会立刻返回,要等最底层的那个函数返回,然后再一层一层地往上走,因此这个过程十分的消耗资源。例如将上面的递归函数fib1的实参改为120,则会发现代码卡很久都没有返回值。
注:本文内容总结于 《小甲鱼零基础入门学习python》视频课程P50