什么是递归?
- 在数学与见算计科学中,是指在函数的定义中使用函数自身的方法。
- 递归算法就是一种直接或者间接的调用自身函数或者方法的算法
- 递归算法的实质是把问题分解规模小的同类问题的子问题
- 然后调用自身方法来解
递归的基本原理
- 每一级的函数调用都有自己的变量
- 每一次函数调用都会有一次返回
- 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序
- 递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反
- 虽然每一级递归都有自己的变量,但是函数的代码不会得到复制
递归的优缺点
优点
- 实现简单
- 可读性好
缺点
- 递归调用,占用空间大
- 递归太深,容易发生栈溢出
- 可能存在重复计算
- 最大递归深度为 998,下文会解决最大递归深度
递归的三大要素
- 明确函数要做什么
- 寻找递归结束条件
- 找出函数的等价关系式
递归过程
python对递归的使用
解决最大递归深度
import sys
sys.setrecursionlimit(3000)
高斯求和
def count_number(n):
if n <= 0:
return 0
return n + count_number(n-1)
def count_Number2(n):
sum = 0
for i in n:
sum += i
return sum
斐波那契
def fn(n):
if n == 1:
return 1
else if n ==2:
return 1
else:
return fn(n-1)+fn(n-2)
青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
fib = lambda n: n if n < 2 else 2 * fib(n - 1)