Python-18-递归经典案例
1.阶乘
使用循环实现:
def factorial(n): result = n for i in range(1, n): result *= i return result
使用函数递归实现:
def factorial(n): if n == 1: return 1 else: return n * factorial(n - 1)
2.幂
普通实现:
def power(x, n): result = 1 for i in range(n): result *= x return result
递归实现:
def power(x, n):
if n == 0: return 1 else: return x * power(x, n - 1)
在大多数情况下,使用循环的效率可能更高。然而,在很多情况下,使用递归的可读性更高
3.二分查找
def search(sequence, number, lower, upper): if lower == upper: assert number == sequence[upper]
return upper else: middle = (lower + upper) // 2 if number > sequence[middle]: return search(sequence, number, middle + 1, upper) else:
return search(sequence, number, lower, middle)
如果没有提供上限和下限,加一行这个即可:
def search(sequence, number, lower=0, upper=None): if upper is None: upper = len(sequence) - 1
(实际上,模块bisect提供了标准的二分查找实现)