一、递归的定义

        函数作为一种代码的封装,在定义是可以直接或间接的调用其他函数,也可以被其他程序内部代码调用。若函数内部调用了本身,则这个函数称之为递归函数

        递归函数在定义时需要满足两个基本条件,一个是递归公式,另一个是边界条件。其中递归公式是求解原问题或相似子问题的结构,边界条件是最小化的子问题,也是递归终止的条件。

        递归函数的执行可以分为以下两个阶段:

(1)递推:递归本次的执行都基于上一次的运算结果。

(2)回溯:遇到终止条件时,则沿着递归递推往回一级一级地把值返回来。

递归函数定义格式:

def 函数名([参数列表])
        if 边界条件:
                return 结构
        else:
                return 递归公式

        以正整数n!为例,当n=1时所得结果为1,当n>1时所得结果为n×(n-1)!。利用递归求解阶乘时n=1时边界条件,n×(n-1)!是递归公式。

def fact(num):
    if num==1:
        return 1
    else:
        return num*fact(num-1)
num=int(input("请输入一个数:"))
result=fact(num)
print(f"{num}!=%d"%result)

运行结果:

递归逻辑:

python函数递归与递推 python中函数的递归_后端

 

        fact() 函数在其定义内部引用了滋生,形成了递归过程。无限制的递归则会耗尽计算资源,因此,在设计是应该通过设计基例使得递归逐层返回。fact()函数通过if语句给出了n为0时的基例,当n==0时fact()函数不在递归返回值为1,如果n!=0,则通过递归返回n与n-1结乘的乘积。

        递归遵顼函数的语意,每次调用都会引起新的函数开始,表示它有本地变量值的副本,包括函数的参数,以计算5!的递归为例,每次函数调用时,函数参数副本会临时存储,递归中各个函数再运算自己的参数,互相没有影响,当基例结束运算并返回值时,各个函数逐层结束运算向调用返回计算结果。

实例:采用递归的方法绘制科赫曲线

        正整数n代表科赫曲面的结束表示生成科赫曲线的操作次数。科赫曲线初始化阶数为0,表示应该长度为L的直线,对于直线L,将其分为三段,中间一段用边长为L/3的等边三角形的两个变替代,以此往复。

示例代码:

import turtle
def koch(size, n):
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:
           turtle.left(angle)
           koch(size/3, n-1)
def main():
    turtle.setup(600,600)
    turtle.speed(100)
    turtle.penup()
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.pensize(2)
    level = 5   #5阶科赫雪花,阶数 
    koch(400,level)
    turtle.right(120)
    koch(400,level)
    turtle.right(120)
    turtle.hideturtle()
main()