迭代

定义:通过循环(如 for 或 while 循环)重复执行一段代码,直到满足某个条件。

特点:使用一个或多个变量来跟踪状态并更新它们,直到满足终止条件。

示例:计算数组中所有元素的总和。

def sum_iterative(arr):
    total = 0
    for num in arr:
        total += num
    return total

递归:

定义:函数在其定义中调用自身,直到满足某个终止条件(基准情形)。

特点:通过将问题分解为更小的子问题来解决,通常需要明确的终止条件以避免无限递归。

示例:计算数组中所有元素的总和。

def sum_recursive(arr):
    if not arr:  # 基准情形
        return 0
    else:
        return arr[0] + sum_recursive(arr[1:])

性能和资源

迭代:

优点:通常比递归更高效,因为没有函数调用的开销。内存使用较少,因为只需维护少量的循环控制变量。

缺点:对于某些问题(如树形结构遍历),编写迭代版本可能会更复杂。

递归:

优点:代码通常更简洁和易读,特别是对于分治法等问题。递归自然地表达了某些问题的结构。

缺点:可能会导致较大的内存开销,因为每个递归调用都需要维护自己的调用栈帧。深度递归可能会导致栈溢出错误。

应用场景

迭代:适用于那些可以用简单的循环和条件判断来解决的问题,如遍历数组、链表等线性结构。

递归:适用于那些可以被分解为相似子问题的问题,如树形结构的遍历、汉诺塔问题、某些数学计算(如阶乘、斐波那契数列)等。

计算阶乘

迭代版本

def factorial_iterative(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

递归版本:

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