云学python (第3章过程大于结果(上)递归)《vamei-从Python开始学编程》 笔记

本文介绍了Python编程中的递归概念,通过高斯求和展示了递归的应用及其与数学归纳法的关系。同时,解释了函数栈的工作原理,强调了栈的后进先出特性在递归函数调用中的作用。此外,还探讨了变量的作用域,说明了函数内部如何访问和修改外部变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.3递归

1.高斯求和与数学归纳法

高斯算1-100的和用到了递归(Recursion),递归源自数学归纳法(Mathematical Induction),其是一种 数学证明方法,常用于证明命题1在自然数范围内成立。

使用递归设计程序的时候,从最终结果入手,即要想求得 gaussian_sum(100),计算机会把这个计算拆解为求得gaussian_sum(99)的运算,以及gaussian_sum(99)in± 100的运算。以此类推,直到拆解为 gaussian sum(1)的运算,就触发终止条件,也就是if结构中n=1时,返回一个具体的数1。尽管整个递归过程很复杂,但在编写程序时,只需关注初始条件、终止条件及衔接,而无须关注具体的每一步。计算机会负责具体的执行

2.函数栈

程序中的递归需要用到栈(Stack)这一数据结构。所谓数据结构,是计算机存储数据的组织方式。栈是数据结构的一种,可以有序地存储数据。

栈最显著的特征是“后进先出”(LIFO, Last In, First Out)。栈的每个元素,称为一个帧(frame)。栈只支持两个操作: poppush。栈用弹出(pop)操作来取出栈顶元素,用推入(push)操作将一个新的元素存入栈顶。

所以,程序运行的过程,可以看作是一个先增长栈后消灭栈的过程。 每次函数调用,都伴随着一个帧入栈。如果函数内部还有函数调用,那 么又会多一个帧入栈。当函数返回时,相应的帧会出栈。等到程序的最后,栈清空,程序就完成了。

3.变量的作用域

Python寻找变量的范围不止是当前帧。它还会寻找函数外部。

函数会优先使用自己函数帧中的那个变量。

在函数调用时,会把数据赋值给这些变量。等到函数返回时,这些参数相关的变量会被清空。

当参数是一个数据容器时,函数内外部只存在一个数据容器,所以函数内部对该数据容器的操作,会影响到函数外部。

def inner_var():
    print(m)
m = 5
inner_var()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值