Skip to content

Commit d2b3141

Browse files
committed
修正了文档中的公式
1 parent a0dfdff commit d2b3141

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

第021课:函数的高级应用.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ upload('Python从入门到住院.pdf')
206206

207207
### 递归调用
208208

209-
Python中允许函数嵌套定义,也允许函数之间相互调用,而且一个函数还可以直接或间接的调用自身。函数自己调用自己称为递归调用,那么递归调用有什么用处呢?现实中,有很多问题的定义本身就是一个递归定义,例如我们之前讲到的阶乘,非负整数$N$的阶乘是$N$乘以$N-1$的阶乘,即$N!=N\times(N-1)!$,定义的左边和右边都出现了阶乘的概念,所以这是一个递归定义。既然如此,我们可以使用递归调用的方式来写一个求阶乘的函数,代码如下所示。
209+
Python中允许函数嵌套定义,也允许函数之间相互调用,而且一个函数还可以直接或间接的调用自身。函数自己调用自己称为递归调用,那么递归调用有什么用处呢?现实中,有很多问题的定义本身就是一个递归定义,例如我们之前讲到的阶乘,非负整数`N`的阶乘是`N`乘以`N-1`的阶乘,即`N! = N * (N-1)!`,定义的左边和右边都出现了阶乘的概念,所以这是一个递归定义。既然如此,我们可以使用递归调用的方式来写一个求阶乘的函数,代码如下所示。
210210

211211
```Python
212212
def fac(num):
@@ -236,7 +236,7 @@ print(fac(5)) # 120
236236

237237
我们使用的Python官方解释器,默认将函数调用的栈结构最大深度设置为`1000`层。如果超出这个深度,就会发生上面说的`RecursionError`。当然,我们可以使用`sys`模块的`setrecursionlimit`函数来改变递归调用的最大深度,例如:`sys.setrecursionlimit(10000)`,这样就可以让上面的`fac(5000)`顺利执行出结果,但是我们不建议这样做,因为让递归快速收敛才是我们应该做的事情,否则就应该考虑使用循环递推而不是递归。
238238

239-
再举一个之前讲过的生成斐波那契数列的例子,因为斐波那契数列前两个数都是`1`,从第3个数开始,每个数是前两个数相加的和,可以记为$f_n=f_{n-1}+f_{n-2}$,很显然这又是一个递归的定义,所以我们可以用下面的递归调用函数来计算第$n$个斐波那契数。
239+
再举一个之前讲过的生成斐波那契数列的例子,因为斐波那契数列前两个数都是`1`,从第3个数开始,每个数是前两个数相加的和,可以记为`f(n) = f(n - 1) + f(n - 2)`,很显然这又是一个递归的定义,所以我们可以用下面的递归调用函数来计算第`n`个斐波那契数。
240240

241241
```Python
242242
def fib(n):

0 commit comments

Comments
 (0)