Python 中 15 个递归函数经典实例剖析

2024-12-30 16:17:34   小编

Python 中 15 个递归函数经典实例剖析

在 Python 编程中,递归函数是一种强大而富有挑战性的概念。它通过在函数内部调用自身来解决问题,能够简洁地处理一些复杂的逻辑。以下为您详细剖析 15 个经典的递归函数实例。

实例 1:计算阶乘

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)

实例 2:斐波那契数列

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

实例 3:计算列表元素之和

def list_sum(lst):
    if not lst:
        return 0
    else:
        return lst[0] + list_sum(lst[1:])

实例 4:反转字符串

def reverse_string(s):
    if len(s) == 0:
        return s
    else:
        return reverse_string(s[1:]) + s[0]

实例 5:计算二叉树节点个数

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def count_nodes(root):
    if root is None:
        return 0
    else:
        return 1 + count_nodes(root.left) + count_nodes(root.right)

实例 6:求最大公约数

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)

实例 7:汉诺塔问题

def hanoi(n, src, aux, dest):
    if n == 1:
        print(f"Move disk 1 from {src} to {dest}")
        return
    hanoi(n - 1, src, dest, aux)
    print(f"Move disk {n} from {src} to {dest}")
    hanoi(n - 1, aux, src, dest)

实例 8:生成全排列

def permute(lst):
    if len(lst) == 0:
        return []
    if len(lst) == 1:
        return [lst]
    result = []
    for i in range(len(lst)):
        m = lst[i]
        rem_lst = lst[:i] + lst[i + 1:]
        for p in permute(rem_lst):
            result.append([m] + p)
    return result

实例 9:判断回文

def is_palindrome(s):
    if len(s) <= 1:
        return True
    if s[0]!= s[-1]:
        return False
    return is_palindrome(s[1:-1])

实例 10:数字转换为字符串

def num_to_str(n):
    if n < 10:
        return str(n)
    else:
        return num_to_str(n // 10) + str(n % 10)

实例 11:求数组最大值

def max_in_list(lst):
    if len(lst) == 1:
        return lst[0]
    else:
        return max(lst[0], max_in_list(lst[1:]))

实例 12:计算指数

def power(base, exp):
    if exp == 0:
        return 1
    else:
        return base * power(base, exp - 1)

实例 13:生成杨辉三角

def pascal_triangle(n):
    if n == 0:
        return [1]
    else:
        prev_row = pascal_triangle(n - 1)
        new_row = [1]
        for i in range(len(prev_row) - 1):
            new_row.append(prev_row[i] + prev_row[i + 1])
        new_row.append(1)
        return new_row

实例 14:合并排序

def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    mid = len(lst) // 2
    left_half = merge_sort(lst[:mid])
    right_half = merge_sort(lst[mid:])
    return merge(left_half, right_half)

def merge(left, right):
    result = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result.extend(left[i:])
    result.extend(right[j:])
    return result

实例 15:快速排序

def quick_sort(lst):
    if len(lst) <= 1:
        return lst
    pivot = lst[len(lst) // 2]
    less = [x for x in lst if x < pivot]
    greater = [x for x in lst if x > pivot]
    return quick_sort(less) + [pivot] + quick_sort(greater)

通过对这 15 个经典递归函数实例的剖析,相信您对 Python 中的递归函数有了更深入的理解和掌握。在实际编程中,合理运用递归函数可以使代码更加简洁高效,但也要注意递归的深度和性能问题,避免出现栈溢出等错误。

TAGS: Python 编程 Python 技术分享 Python 递归函数 递归算法应用

欢迎使用万千站长工具!

Welcome to www.zzTool.com