1.递归欧几里得
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
2.递归快速幂
def quick_pow(x, n):
if n == 0:
return 1
res = quick_pow(x * x, n >> 1)
if n & 1:
res *= x
return res
3.递归汉诺塔
def hanoi(n, a, b, c):
if n == 0:
return
hanoi(n - 1, a, c, b)
print("Move {} from {} to {}.".format(n, a, c))
hanoi(n - 1, b, a, c)
4.递归阶乘
def fac(n):
if n == 0 or n == 1:
return 1
return n * fac(n - 1)
5.递归斐波那契
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n - 1) + fib(n - 2)
- 记忆化数组
F = [0, 1, 1]
def fib(n):
try:
return F[n]
except IndexError:
f = fib(n - 1) + fib(n - 2)
F.append(f)
return f
- 折半
maxn = 100001
F = [0 for i in range(maxn)]
def fib(n):
if F[n] != 0:
return F[n]
F[n] = fib(n // 2 + 1) * fib((n + 1) // 2) + fib(n // 2) * fib((n + 1) // 2 - 1)
return F[n]