📅  最后修改于: 2023-12-03 15:41:57.893000             🧑  作者: Mango
递归是算法中的一种重要方法,可以解决很多问题。递归关系练习集是为程序员提供的一些练习,帮助他们更好地掌握递归方法。
阶乘函数是一个经典的递归例子。 它可以用来计算一个正整数的阶乘。 它的递归公式如下:
f(n) = n * f(n-1), if n > 1
f(n) = 1, if n == 1
其中,n
是正整数。
def factorial(n):
if n > 1:
return n * factorial(n-1)
else:
return 1
斐波那契数列是另一个经典的递归例子。 它是由 0 和 1 开始的一系列数字,后续数字是前两个数字的和。 它的递归公式如下:
f(n) = f(n-1) + f(n-2), if n > 1
f(n) = n, if n in (0, 1)
其中,n
是非负整数。
def fib(n):
if n > 1:
return fib(n-1) + fib(n-2)
else:
return n
汉诺塔问题是另一个经典的递归例子。 它是一种数学问题,它包含三根杆子和若干圆盘,圆盘的直径各不相同。任意时刻都只有一根杆子上面可以放置圆盘。 它的递归公式如下:
move(n, A, B, C):
if n == 1:
move one disk from A to C
else:
move(n-1, A, C, B) # move n-1 disks from A to B
move(1, A, B, C) # move one disk from A to C
move(n-1, B, A, C) # move n-1 disks from B to C
其中,n
是圆盘的数量,A
、B
、C
是三根杆子的名称。
def move(n, A, B, C):
if n == 1:
print(f'move disk {n} from {A} to {C}')
else:
move(n-1, A, C, B)
print(f'move disk {n} from {A} to {C}')
move(n-1, B, A, C)
二叉搜索树是一个二叉树,其中每个节点都包含一个关键字,左子树的所有关键字小于该节点的关键字,右子树的所有关键字大于该节点的关键字。 它的递归公式如下:
search(node, key):
if node is None or node.key == key:
return node
elif key < node.key:
return search(node.left, key)
else:
return search(node.right, key)
其中,node
是根节点,key
是要查找的关键字。
class Node:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
def search(node, key):
if node is None or node.key == key:
return node
elif key < node.key:
return search(node.left, key)
else:
return search(node.right, key)
以上就是递归关系练习集的例子,可以帮助程序员更好地掌握递归方法。