一、递归函数基础
示例:斐波那契数列
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
# 使用示例
print(fibonacci(10))
# 输出: 55
二、性能考量与优化
优化:使用Memoization
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci_memo(n-1, memo) + fibonacci_memo(n-2, memo)
return memo[n]
# 使用示例
print(fibonacci_memo(10))
# 输出: 55
三、进阶应用
def __init__(self, value=0, left=None, right=None):
self.value = value
self.left = left
self.right = right
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.value)
inorder_traversal(root.right)
# 使用示例
root = TreeNode(1, TreeNode(2), TreeNode(3))
inorder_traversal(root)
# 输出: 2 1 3
2、快速排序
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
# 使用示例
print(quicksort([3,6,8,10,1,2,1]))
# 输出: [1, 1, 2, 3, 6, 8, 10]
四、避免常见陷阱
问题示例:忘记添加基本情况
# 忘记了基本情况,导致函数无限调用自身
print(n)
infinite_recursion(n-1)
# infinite_recursion(5)
# 调用这个函数将导致无限递归
解决方案:确保每个递归函数都有一个明确的基本情况
if n <= 0: # 基本情况,确保递归能够停止
print(“Recursion ends.”)
return print(n)
safe_recursion(n-1)
safe_recursion(5)
问题示例:深度递归导致的堆栈溢出
if n == 0: # 基本情况
return 0
else:
return deep_recursion(n-1) + 1
# deep_recursion(5000)
# 这个调用可能会导致堆栈溢出错误
迭代解决方案:
result =0
for _ in range(n):
result +=1
return result
print(iterative_solution(5000))
增加递归深度限制:
sys.setrecursionlimit(10000) # 增加Python的最大递归深度限制
def safe_deep_recursion(n):
if n == 0:
return 0
else:
return safe_deep_recursion(n-1)+1
print(safe_deep_recursion(5000))
原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/90663.html