实验目的
- 理解递归和迭代的区别和联系
- 掌握递归函数的编写方法
- 学会分析问题并能够使用递归来提出解决方案
实验内容
1. 找出列表中的最大数
编写一个递归函数,返回一个列表中的最大数。编写一个测试程序提示用户输入一个整数列表并显示其中最大的元素
# 1. 找出列表中的最大数
# 编写一个递归函数,返回一个列表中的最大数。编写一个测试程序提示用户输入一个整数列表并显示其中最大的元素
# 12 34 45 66 32 24 67
def max_num(lst):
if len(lst) == 0:
return -1
elif len(lst) == 1:
return lst[0]
else:
if lst[0] > max_num(lst[1:]):
return lst[0]
else:
return max_num(lst[1:])
def main():
lst = list(map(int, input("请输入一个整数列表:").split()))
if max_num(lst) == -1:
print("列表为空")
else:
print(max_num(lst))
if __name__ == '__main__':
main()
2. 以逆序输出一个整数中的数字
编写一个递归函数,使用下面的函数头在控制台上以逆序显示一个整型值。
def reverse_display(value):
例如,调用reverse_display(12345),输出的是54321。编写一个测试程序,提示用户输入一个整数然后逆序输出这个整数的个位数字。
# 2. 以逆序输出一个整数中的数字
# 编写一个递归函数,使用下面的函数头在控制台上以逆序显示一个整型值。
# def reverse_display(value):
# 例如,调用reverse_display(12345),输出的是54321。编写一个测试程序,提示用户输入一个整数然后逆序输出这个整数的个位数字。
def reverse_display(value):
if value > 9:
print(value % 10, end="")
reverse_display(value // 10)
else:
print(value, end="")
def main():
value = int(input("请输入一个整数:"))
reverse_display(value)
if __name__ == '__main__':
main()
3. 科赫雪花分形
编程实现科赫雪花分形,提示用户输入阶数并显示对应的分形。
科赫雪花是根据一位著名的瑞典数学家的名字命名的,按如下方式产生:
- 从一个等边三角形开始,将其作为0阶(或0级)科赫分形,如图a所示。
- 将图形中的每条边分成三个相等的线段,以中间的线段作为底边向外画一个等边三角形,产生1阶科赫分形,如图b所示。
- 重复步骤(2)产生2阶科赫分形、3阶科赫分形、……、如图c、图d所示。
# 3. 科赫雪花分形
# 编程实现科赫雪花分形,提示用户输入阶数并显示对应的分形。
# 科赫雪花是根据一位著名的瑞典数学家的名字命名的,按如下方式产生:
# (1) 从一个等边三角形开始,将其作为0阶(或0级)科赫分形,如图a所示。
# (2) 将图形中的每条边分成三个相等的线段,以中间的线段作为底边向外画一个等边三角形,产生1阶科赫分形,如图b所示。
# (3) 重复步骤(2)产生2阶科赫分形、3阶科赫分形、……、如图c、图d所示。
# import os
import turtle
def koch(size, order):
if order == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size / 3, order - 1)
def main():
order = eval(input("请输入阶数:"))
turtle. Setup(800, 800)
turtle. Speed(0)
turtle.penup()
turtle.goto(-200, 200)
turtle.pendown()
turtle.pensize(2)
koch(400, order)
turtle.right(120)
koch(400, order)
turtle.right(120)
koch(400, order)
turtle.hideturtle()
turtle.mainloop()
if __name__ == '__main__':
main()