📜  递归关系练习集(1)

📅  最后修改于: 2023-12-03 15:41:57.893000             🧑  作者: Mango

递归关系练习集

递归是算法中的一种重要方法,可以解决很多问题。递归关系练习集是为程序员提供的一些练习,帮助他们更好地掌握递归方法。

1. 阶乘函数

阶乘函数是一个经典的递归例子。 它可以用来计算一个正整数的阶乘。 它的递归公式如下:

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
2. 斐波那契数列

斐波那契数列是另一个经典的递归例子。 它是由 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
3. 汉诺塔问题

汉诺塔问题是另一个经典的递归例子。 它是一种数学问题,它包含三根杆子和若干圆盘,圆盘的直径各不相同。任意时刻都只有一根杆子上面可以放置圆盘。 它的递归公式如下:

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 是圆盘的数量,ABC 是三根杆子的名称。

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)
4. 二叉搜索树

二叉搜索树是一个二叉树,其中每个节点都包含一个关键字,左子树的所有关键字小于该节点的关键字,右子树的所有关键字大于该节点的关键字。 它的递归公式如下:

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)

以上就是递归关系练习集的例子,可以帮助程序员更好地掌握递归方法。