本文部分内容源自北京理工大学的国家精品课程《pythonc程序语言设计》笔记,课程地址:https://www.icourse163.org/learn/BIT-268001#/learn/announce
递归函数:如果一个函数直接或间接调用该函数本身,则该函数称为递归函数,在数学中也很常见,例如我们计算n!。
递归思想:函数+分支
链条:在计算过程中存在一种递归有序的链条关系。
基例:存在一个或多个不需要再次递归的基例,或者说是递归的末端,是一种极端情况。
1、实现字符串反转
>>> def rvs(s):
... if s == "": #极端情况,判断字符串是否为空,即为基例
... return s
... else:
... return rvs(s[1:])+s[0] #切片操作,实现将首字符转移至末尾
...
>>> rvs("012345678")
'876543210'
>>> rvs("hello")
'olleh'
2、斐波那契数列
>>> def Fibonacci_fun(n):
... if n == 1 or n == 2:
... return 1
... else:
... return Fibonacci_fun(n-1)+Fibonacci_fun(n-2)
...
>>> Fibonacci_fun(2)
1
>>> Fibonacci_fun(3)
2
>>> Fibonacci_fun(5)
5
3、科赫曲线
我们发现,1阶科赫曲线就是截取一条直线中间的1/3段,然后形成一个60度的角,2阶科赫曲线就是在一阶科赫曲线的基础上,再在每条直线上,截取中间的1/3的线段,然后形成一个60度的角。
我们考虑,极端情况,科赫曲线即n阶为0的时候,我们绘制的就是一条直线。
import turtle
b = eval(input("请输入雪花的阶数:"))
def Koch(size,n):
if n == 0:
turtle.fd(size) #极端情况,阶数为0,绘制一条直线
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
Koch(size/3,n-1)
def main():
turtle.penup()
turtle.goto(-75,250)
turtle.pendown()
turtle.write("科赫雪花", move=False, font=('arial', 30, 'normal'))
turtle.setup(600,600) #设置窗口大小
turtle.penup() #抬起画笔
turtle.goto(-200,100) #坐标原点移至(-200,100)处
turtle.pendown() #落下画笔
turtle.pensize(2) #设置海龟宽度
Koch(400,b)
turtle.right(120)
Koch(400,b)
turtle.right(120)
Koch(400,b)
turtle.hideturtle()
turtle.done()
main()
#程序运行结果
请输入雪花的阶数:3
以上结果,如有错误,敬请批评指正!谢谢!