递归函数(实现字符串反转、斐波那契数列、科赫曲线)

本文部分内容源自北京理工大学的国家精品课程《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

在这里插入图片描述
以上结果,如有错误,敬请批评指正!谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值