Python编程之鬼打墙——递归

深入浅出掌握递归思维,解锁神奇编程世界

图片

1. 什么是递归?一个古老的故事告诉你

“从前有座山,山上有个老和尚在给小和尚讲故事,讲的故事是:从前有座山,山上有个老和尚在给小和尚讲故事...”

这个无限循环的故事正是递归的完美比喻!在编程中,递归就是函数自己调用自己的过程,就像故事里不断嵌套的剧情。

啥是递归?

其实就是套娃

图片

图片

2. 递归 vs 循环:双胞胎的不同性格

# 循环示例
for i in range(100):
    print(f"这是第{i}次循环")

# 递归示例
def recursive_func(n):
    if n > 0: 
        print(f"这是第{n}次递归调用")
        recursive_func(n-1)

图片

关键区别:

  • 循环:变量变化,执行相同代码块

  • 递归:函数自我调用,每次参数不同,形成调用栈

3. 递归核心思维:三步构建递归函数

def 递归函数(参数):
    if 满足终止条件:  # 必须存在!否则无限递归
        return 终止结果
    
    处理当前层逻辑
    递归调用(修改后的参数)  # 向问题规模更小的方向前进
    组装结果返回

递归的思维和循环有一点像,但和循环不同的是:循环是参数变量在变,而每次执行的代码全部一致;

foriinrange(10o):#i每循环一次增加1

而递归则是函数是“自己调用自己”,被调用的那个“自己”里面,还有“自己”,就像套娃一样,只要满足条件就能不断地调用“自己”,每次调用时的参数变量是可以不同的。

4. 经典递归案例集锦

案例名称

特点说明

应用场景

斐波那契数列

F(n)=F(n-1)+F(n-2)

算法题、数学模型

汉诺塔问题

通过中介柱移动圆盘

分治算法教学

递归画树

树枝分叉的自我相似性

计算机图形学

谢尔宾斯基三角

无限自相似的分形结构

分形几何可视化

图片

5. 实战:用递归绘制神奇螺旋(Turtle版)

from turtle import *

def draw_spiral(L):
    if L < 300:  # 终止条件
        forward(L)
        right(90)
        draw_spiral(L+5)  # 递归调用,增大长度

draw_spiral(10)  # 初始长度
done()

运行结果:

图片

这个例子的具体过程:

图片

6. 高级递归:彩色分形艺术

from random import randrange
from turtle import *

colormode(255)
color(0, 0, 0)
x = 0
ax = 20
hideturtle()
pensize(3)
tracer(5)
penup()
goto(0, 0)
pendown()


def a(l):
    global x, ax
    if l > 0:
        x = x + ax
        if x > 255:
            ax = -20
            x = 255
        elif x < 0:
            ax = 20
            x = 0
        color(255 - x, randrange(50, 200), randrange(50, 200))

        for j in range(8):
            for i in range(45):
                forward(l / 4)
                right(1)
            a((l - 5) / 2)  # 保持原始递归参数计算
            right(135)
            for i in range(45):
                forward(l / 4)
                right(1)
            right(135 + 45)


a(22)
done()

运行结果:

图片

7. 递归的注意事项

  1. 必须存在终止条件 - 否则变成“死循环套娃”

  2. 每次递归应缩小问题规模 - 如n→n-1

  3. 注意调用栈深度 - Python默认递归深度约1000层

  4. 重要工具:使用sys.setrecursionlimit()调整深度

结语:递归思维的力量

递归不仅是编程技巧,更是一种分解复杂问题的思维方式。就像拆解俄罗斯套娃,把大问题拆成相似的小问题,各个击破。掌握递归,你将在算法、AI、图形学等领域获得强大的问题解决能力!

图片

想要理解递归,你需要先理解递归,再理解递归……直到你能理解递归

图片

找出这句话的bug(证明你真正学会了递归)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值