Python中的递归详解
在Python中,递归是一种非常强大的编程技术,可以用来解决一些复杂的问题。递归函数是一个直接或间接调用自身的函数。在使用递归时,必须有一个明确的退出条件,否则,递归将无限进行下去,形成一个无限循环。
以下是一些Python中的递归示例:
- 计算阶乘:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 输出: 120
- 斐波那契数列:
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # 输出: 55
- 排列组合:
def perm(lst, n):
if n == 1:
return [lst]
else:
l = []
for i in range(len(lst)):
t = lst[:i] + lst[i+1:]
p = perm(t, n-1)
for j in p:
l.append(lst[i:i+1] + j)
return l
lst = [1, 2, 3, 4]
print(perm(lst, 4))
- 二分查找:
def binary_search(lst, n, key):
if n == 0:
return False
else:
mid = n//2
if lst[mid] == key:
return True
elif lst[mid] > key:
return binary_search(lst[:mid], mid, key)
else:
return binary_search(lst[mid+1:], n-mid-1, key)
lst = [2, 3, 4, 10, 45, 90, 100]
print(binary_search(lst, len(lst), 100)) # 输出: True
在使用递归时,必须确保递归能够在适当的时候停止,否则,将会导致RuntimeError: maximum recursion depth exceeded
错误。可以通过sys
模块的setrecursionlimit
函数来增加递归深度。
import sys
sys.setrecursionlimit(1000)
注意:提高递归深度可能会导致程序占用更多的内存和处理器时间,并可能使程序不稳定。因此,应该尽可能避免增加递归深度或者重写递归代码以使用迭代等其他方法。
评论已关闭