Python应用开发 课件 4.1函数 递归函数.pptx
python程序设计
函数
1.掌握Python递归函数
递归函数
数学上有个经典的递归例子叫阶乘,阶乘通常定义为:
n!=n(n-1)(n-2)…(1)
n=0时,n!=1
我们通过分支和循环能完成相关运算
#获取用户输入的数字
num=int(input(请输入一个整数:))
factorial=1
ifnum0:
print(抱歉,负数没有阶乘)
elifnum==0:
print(0的阶乘为1)
else:
foriinrange(num,0,-1):
factorial=factorial*i
print({}的阶乘为{}.format(num,factorial))
递归函数
上述计算阶乘的算法比较复杂,不容易理解。还有没有更简便的解决方案呢?
阶乘还有另一种表达方式:
这其实又是一个阶乘的表达,变量变为n-1.
如果我们定义一个求阶乘的函数,那么函数自己能不能调用自己呢?
递归函数
函数作为一种代码封装,可以被其它程序调用,当然,也可以被函数内部代码调用。
这种函数定义中调用函数自身的方式称为递归。
就像一个人站在装满镜子的房间中,看到的影像就是递归的结果。
递归在数学和计算机应用上非常强大,能够非常简洁的解决重要问题。
根据用户输入的整数n,计算并输出n的阶乘值。
deffact(n):
ifn==0:
return1
else:
returnn*fact(n-1)
num=eval(input(求阶乘请输入一个整数:))
print(fact(num))
递归函数
以n=5为例,看看递归执行过程。
递归函数
阶乘的例子揭示了递归的2个关键特征:
1、存在一个或多个基例,基例不需要再次递归,它是一个确定的表达式。
2、所有递归链要以一个或多个基例结尾。
注意:
在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。
递归次数过多容易造成栈溢出等。
递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。
所以一般不提倡用递归算法设计程序。
Python函数
1.函数的递归调用
谢谢