修正了文档中的公式

pull/7/head
jackfrued 2020-05-05 19:48:25 +08:00
parent a0dfdffef9
commit d2b314124c
1 changed files with 2 additions and 2 deletions

View File

@ -206,7 +206,7 @@ upload('Python从入门到住院.pdf')
### 递归调用
Python中允许函数嵌套定义也允许函数之间相互调用而且一个函数还可以直接或间接的调用自身。函数自己调用自己称为递归调用那么递归调用有什么用处呢现实中有很多问题的定义本身就是一个递归定义例如我们之前讲到的阶乘非负整数$N$的阶乘是$N$乘以$N-1$的阶乘,即$N!=N\times(N-1)!$,定义的左边和右边都出现了阶乘的概念,所以这是一个递归定义。既然如此,我们可以使用递归调用的方式来写一个求阶乘的函数,代码如下所示。
Python中允许函数嵌套定义也允许函数之间相互调用而且一个函数还可以直接或间接的调用自身。函数自己调用自己称为递归调用那么递归调用有什么用处呢现实中有很多问题的定义本身就是一个递归定义例如我们之前讲到的阶乘非负整数`N`的阶乘是`N`乘以`N-1`的阶乘,即`N! = N * (N-1)!`,定义的左边和右边都出现了阶乘的概念,所以这是一个递归定义。既然如此,我们可以使用递归调用的方式来写一个求阶乘的函数,代码如下所示。
```Python
def fac(num):
@ -236,7 +236,7 @@ print(fac(5)) # 120
我们使用的Python官方解释器默认将函数调用的栈结构最大深度设置为`1000`层。如果超出这个深度,就会发生上面说的`RecursionError`。当然,我们可以使用`sys`模块的`setrecursionlimit`函数来改变递归调用的最大深度,例如:`sys.setrecursionlimit(10000)`,这样就可以让上面的`fac(5000)`顺利执行出结果,但是我们不建议这样做,因为让递归快速收敛才是我们应该做的事情,否则就应该考虑使用循环递推而不是递归。
再举一个之前讲过的生成斐波那契数列的例子,因为斐波那契数列前两个数都是`1`从第3个数开始每个数是前两个数相加的和可以记为$f_n=f_{n-1}+f_{n-2}$,很显然这又是一个递归的定义,所以我们可以用下面的递归调用函数来计算第$n$个斐波那契数。
再举一个之前讲过的生成斐波那契数列的例子,因为斐波那契数列前两个数都是`1`从第3个数开始每个数是前两个数相加的和可以记为`f(n) = f(n - 1) + f(n - 2)`,很显然这又是一个递归的定义,所以我们可以用下面的递归调用函数来计算第`n`个斐波那契数。
```Python
def fib(n):