Python进阶之递归算法详解

递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。通俗一点来讲就是:在某个python文件中,有一个函数,这个函数可以在自己的函数体内根据条件,自己调用自己的函数,那么这样自身调用自身的过程或者说行为,我们称之为递归。
Python进阶之递归算法详解

无参函数

如果一段代码需要重复使用,就可以把它封装到一个函数中。

定义函数

py

def 函数名():
    下级代码

调用函数

py

函数名()

样例

输入
py

def info():
    print('小王子')
    print('xiaowangzi')
    print('kevin')
info()
输出

小王子
xiaowangzi
kevin

有参函数

给函数添加了参数,在函数中,就可以使用这个参数。

定义

py

def 函数名(参数名):
    下级代码

调用

py

函数名(传递的值)

样例

输入
py

def check(num):
    n1 = num // 10
    n2 = num % 10
    print('十位',n1)
    print('个位', n2)
check(25)
输出

十位: 2
个位: 5

无参递归

递归就是在函数中调用自己。

py

def mark():
    print(1)
    mark()             #调用自己

mark()函数的执行过程:

Python进阶之递归算法详解

当在函数外调用一次mark()函数:执行函数的下级代码,又会调用自己,再执行下级代码,仍然会调用自己……因此程序会一直不停的调用mark()函数,也就会一直不停的输出1。

有参递归

要在每次执行函数,打印不同的内容,可以给函数添加参数。

py

def mark():
    print(1)
    mark(n+1)             #调用自己, 并传递大1的参数

调用mark()函数,并传递参数3,代码的执行过程:

Python进阶之递归算法详解

会依次打印出3、4、5、6……逐渐增大1的数字。

无限递归

无限递归,就是会一直重复、没有结束的递归。
使用递归的方式打印编号

py

def fix(n):
    print(n)
    fix(n+1)
fix(1)

从1开始,逐一增大。

fix()函数的执行过程

Python进阶之递归算法详解

输出区会依次打印1、2、3、4 。。。

在不同场景中,首次调用函数时传入的参数值不同,每次递归时,参数值的变化也不同。

py

def fix(n):
    print(n)
    fix(n*2)
fix(2)

有返回值的递归

通常我们不会让递归操作一直重复执行下去,我们会在满足特定条件时,使用return语句结束函数执行。

py

def move(n):
    if n == 4:      #当参数n的值等于4时,使用return语句结束当前函数执行
        return
    print(n)
    print('left')
    move(n+1)
move(1)
print('get')

move()函数的执行过程

Python进阶之递归算法详解

move()函数会打印出参数n的值和字符串left,然后再次调用move()函数,并让参数n的值增大1。

当参数n的值变为4时,if判断条件成立,执行return语句,会结束当前函数的执行,然后回到上一层中,接着move(3)这一层函数执行完毕,回到move(2)这一层。。。直到最终move(1)这一层函数执行完毕。

如果想在递归中得到一个返回值,我们可以使用return语句返回结果。

递归的结束条件

当满足一定的条件时,递归函数不会再继续调用自己,那么这个条件就是递归的结束条件。

没有递归结束条件,程序就不知道在哪里结束,会陷入无限递归中,最终导致程序报错

一个结束条件的情况

py

def func(n): 
    if n == 1:
        return 6
    a = func(n-1) 
    return a + 1

多个结束条件情况
def func2(n):
if n == 1:
return 50
if n == 2:
return 100
a = func2(n-2)
return 500 + a

归纳返回值表达式

归纳A、B、C三种投资方案的返回值表达式。
f(n)表示第n个月的总利润

Python进阶之递归算法详解

f(n)的表达式就是我们要找的规律,也就是我们需要归纳的返回值的表达式,所以可以直接写在return后面。

A的返回值表达式:return 2*f(n-1)
B的返回值表达式:return 500 + f(n-2)
C的返回值表达式:return f(n-1) + f(n-2)

应用

根据以下规律,利用递归函数写出计算n!的代码。
5!= 5*4*3*2*1
6!= 6*5*4*3*2*1
7!= 7*6*5*4*3*2*1

py

def f(n):
    if n == 1:
        return 1
    return n*f(n-1)
n = int(input())
print(f(n))
发布于2022-12-27 18:53
没有伞的孩子,必须学会努力奔跑。

赞助 点赞 1

魔法修狗等人对本文发表了2条热情洋溢的评论。
  • 魔法修狗说道: 0
    好久没来变化真大!
    1. 老王说道:
      回复 魔法修狗: 好久没折腾了,应该没变化呀!😂
  • 发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注