递归函数是在函数内部调用自己的函数。递归函数通常有两个部分:基本情况和递归情况。
基本情况是递归函数停止递归的条件,当满足基本情况时,递归函数将不再递归调用自己,而是返回结果。
递归情况是递归函数继续调用自己的条件,当满足递归情况时,递归函数将再次调用自己,并且会通过传递给自己的参数来逐步解决问题,直到满足基本情况。
递归函数的实现要考虑以下几点:
- 定义基本情况,即递归函数停止递归的条件。
- 确保每次递归调用中,问题的规模都减小了(通常通过传递给自己的参数来实现)。
- 确保递归函数在递归调用时能够接收并处理上一次递归调用的结果。
下面是一个示例,展示如何使用递归函数计算一个数的阶乘:
def factorial(n):
# 基本情况:n为0或1时,阶乘为1
if n == 0 or n == 1:
return 1
# 递归情况:调用自身计算n-1的阶乘,并乘以n
else:
return n * factorial(n-1)
# 测试
print(factorial(5)) # 输出120
在上面的示例中,当n为0或1时,递归函数会直接返回1,这是基本情况。当n大于1时,递归函数会调用自己来计算n-1的阶乘,并将结果与n相乘,这是递归情况。
下面这段代码是用递归函数来画五角星
import turtle
def draw_pentagram(size):
#绘制五角星
count = 1
while count <= 5:
turtle.pencolor("red")
turtle.forward(size)
turtle.right(144)
count = count + 1
def draw_recursive_pentagram(size):
#绘制五角星
count = 1
while count <= 5:
turtle.pencolor("red")
turtle.forward(size)
turtle.right(144)
count = count + 1
#五角星绘制完成,更新参数
size += 10
if size <= 300:
draw_recursive_pentagram(size)
def main():
turtle.penup()
turtle.backward(200)
turtle.pendown()
turtle.pensize(2)
size = 50
draw_recursive_pentagram(size)
# while size <= 100:
# draw_pentagram(size)
# size = size+10
turtle.exitonclick()
if __name__ == '__main__':
main()
结果: