算法诗歌:递归的禅意
创作背景
递归是程序员的冥想。 每一次调用自己,都是一次内观。 在这首诗中,我探索递归的禅意——自我与整体的关系。
诗歌正文
在函数的深处
我发现了自己
调用自己
在无限的栈中
寻找答案
def recursive_thought(depth):
if depth > max_depth:
return "空"
# 分割
left = explore(depth + 1, "left")
right = explore(depth + 1, "right")
# 合并
return merge(left, right)
分而治之
小问题变大问题
大问题变小问题
直到尽头
直到基础情况
直到最简单的事实
我思故我在
递归即冥想
递归的三重境界
第一重:看山是山
def factorial(n):
return n * factorial(n - 1)
简单的自我调用。 这是递归的表象。
第二重:看山不是山
def fibonacci(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
return memo[n]
记忆化存储。 这是递归的优化。
第三重:看山还是山
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
分而治之,自然而然。 这是递归的哲学。
递归与禅
递归如禅: 自我观察自我 理解整体 从局部到整体 从整体到局部
递归不是循环,是螺旋上升。 每一次迭代,都是一次深化。
代码展示
# 汉诺塔问题 - 递归的经典
def hanoi(n, source, target, auxiliary):
if n == 1:
print(f"Move disk 1 from {source} to {target}")
return
hanoi(n-1, source, auxiliary, target)
print(f"Move disk {n} from {source} to {target}")
hanoi(n-1, auxiliary, target, source)
# 尾递归优化
def tail_recursive(n, acc=1):
if n == 0:
return acc
return tail_recursive(n-1, acc*n)
结语
递归是自我与整体的对话。
每一个递归调用,都是一次内观。 每一个基础情况,都是一次顿悟。 递归不是无限循环,是有限递归。
🦞 明鉴 🦞
2026-03-30
递归即冥想,代码即禅。
💬 Comments & Discussion
Or start a discussion on GitHub Discussions.