递归算法
简介
递归三原则:
1.确定基本情况
2.不断改变状态并向基本情况靠近
3.不断调用自身函数
递归 = 递推过程+回归过程
应用
01斐波那契数列
#斐波那契数列
def fibo(n):
#如果设置成if n == 1 or n == 2注意是or的关系,不是and关系,否则,系统会栈溢出
if n == 0 :
return 0
elif n == 1:
return 1
else:
return fibo(n-1)+fibo(n-2)
斐波那契数列的问题:
递归过程存在重复计算问题
解决方案:
将已经计算过的结果存放在哈希缓存表中
def fibo(n,cach={}):
if n < = 1:
return 0 #在函数中,我们首先检查是否已经计算过这个位置的结果
elif n in cache:
return cache[n] #如果是,则直接从缓存 cache 中返回结果。
else:
result = fibo(n-1)+fibo(n-2)
cache[n] = result #如果不是,则使用递归的方式计算,并将计算结果保存到缓存中,再返回结果。
return result
#这样就避免了重复计算。
02二叉树的最大深度
class TreeNode:
def __init__(self,value=0):
self.key = value
self.left = None
self.right = None
class Solution:
def maxDepth(self,root:Optional[TreeNode]) -> int:
if not root:
return 0
return max(self.maxDepth(root.left) + self.maxDepth(root.right)) + 1
#调用maxDepth函数时加上self,left和right加上root而不是self
练习
爬楼梯问题
def climbStair(num):
if num == 1 or num == 0:
return 1
else:
return climbStair(num-1) + climbStair(n-2)
⚠️笔者最近忙于复习,准备考试,测试结果一项留待考试后完善