1. 什么是递归?它是如何工作的?
递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。简单的来说就是:在自己的函数体中调用自己。
递归,需要有‘递’进关系和‘归’的条件。
举一个简单的例子:求阶乘 n!
# python3
# 递归写法
def factorial(n):
if n == 1: # '归'的条件
return n
return n * factorial(n-1) # 递进关系 f(n) = n * f(n-1)
# 普通写法
def factorial1(n):
result = 1
for i in range(1, n+1):
result *= i
return result
2. 如何递归地解决问题?
从上面的例子可以看出,有‘递’进关系,且有‘归’的条件的问题,都可以用递归算法求解。那么求解这类问题的关键,就是找到这两个要素 ‘递’、‘归’。再举个经典的例子:求第n项斐波那契数列
斐波那契数列:0 1 1 2 3 5 8 … (从第3项开始,每一项等于前两项的和)
即 f(0) = 0, f(1) = 1, f(n) = f(n-1) + f(n-2) (n >=2)
# python3
def fibo(n):
if n < 2: # '归'的条件
return n
return fibo(n-1) + fibo(n-2) # '递进'关系