我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中递归算法怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中递归算法怎么用

小编给大家分享一下Python中递归算法怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

递归是一种较为抽象的数学逻辑,可以简单的理解为「程序调用自身的算法」。

维基百科对递归的解释是:

递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。

例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。

"递"是传递的意思,"归"是归还的意思,先把一个方法一层层传递下去,然后传递到最后一层再把结果归还回来。

Python中递归算法怎么用

比方说我排队做核酸检测,前面有100个人,我想问下医务人员几点下班,于是问了我前面那兄弟,他又问了他前面的人,一个个传递下去,最终传递到了医务人员那里,回话说下午六点下班。这句话又往回传,最终到了我这里,我知道了医务人员六点下班。

这个过程就是一个递归过程,如果说"传话"本身是一种方法,那这整个传话过程就是在调用自身方法,最终获得了结果。

这和循环不一样,循环相当于给所有人都所有人都戴了耳机,然后有"中介"挨个去问你知道医务人员几点下班吗,等问到医务人员的时候,得到答案,“中介”告诉我六点下班。

实质上,递归就是把一个大问题不断拆解,像剥洋葱一样,最终拆解到最小层面,会返回解题结果。

Python中递归算法怎么用

用Python举一个最简单的递归函数例子,讲一讲什么是递归的应用。

我们经常会看到函数会调用自身来实现循环操作,比如求阶乘的函数。

整数n的阶乘即n*(n-1)*(n-2)*...*3*2*1

如下面5行Python代码,就能实现阶乘的计算

def fact(n):    ''' n表示要求的数的阶乘 '''    if n==1:        return n     n = n*fact(n-1)    return n  print(factorial(5))

输出:

120

很多人可能困惑这里面的计算逻辑,为什么fact函数中调用了自身,最终能得到结果。

我们可以按照数学逻辑进行推演:

整数n的阶乘是:fact(n) = n*(n-1)*...*3*2*1

整数n-1的阶乘是:fact(n-1) = (n-1)*(n-2)*...*3*2*1

所以可以推断 fact(n) = n*fact(n-1)

Python中递归算法怎么用

这里是不是一种 fact方法可以为每个数所调用,最终调用到了n=1的时候,就返回结果n的阶乘。

Python中递归算法怎么用

大家看上图,递归函数会一层层往下调用,最终到n=1的时候,往上返回结果。

这就是递归的全过程,如果我们给递归下一个准确的定义,可以概括为以下3点:

至少有一个明确的递归结束条件;

给出递归终止时的处理办法;

每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少

以上面代码为例:

def factorial(n):    ''' n表示要求的数的阶乘 '''    if n==1: # 1、明确递归终止条件;        return n # 2、递归终止时的处理办法    n = n*factorial(n-1) # 递去    return n  # 归来

除了常见的阶乘案例,还有斐波那契数列,也是递归的经典用法。

斐波那契数列:1,1,2,3,5,8,13,21,34,55,89...

这个数列从第3项开始,每一项都等于前两项之和。

它以如下被以递推的方法定义:F(0)=0,F(1)=1,F(n)=F(n - 1)+F(n - 2)(n≥ 2,n∈ N*)

在Python中,我们可以使用递归函数的方式去实现斐波那契数列:

# 1,1,2,3,5,8,13,21,34,55,试判断数列第12个数是哪个?def fab(n):    ''' n为斐波那契数列 '''    if n <= 2:        v = 1        return v     v = fab(n-1)+fab(n-2)     return v  print(fab(12))

使用数学方法进行推导:

  • fab(0) = 0(初始值)

  • fab(1) = 1(初始值)

  • 对所有大于1的整数n:fab(n) = fab(n-1)+ fab(n-2)(递归定义)

其实以上两个递归的案例都可以用数学归纳法来解释,就是高中数学的知识。

一般地,证明一个与自然数n有关的命题P(n),有如下步骤:

(1)证明当n取第一个值n0时命题成立。n0对于一般数列取值为0或1,但也有特殊情况;

(2)假设当n=k(k&ge;n0,k为自然数)时命题成立,证明当n=k+1时命题也成立。

综合(1)(2),对一切自然数n(&ge;n0),命题P(n)都成立。

除了数学的解释,之前也看到有人对递归更加形象的解释:

我们已经完成了吗?如果完成了,返回结果。如果没有这样的终止条件,递归将会永远地继续下去。

如果没有,则简化问题,解决较容易的问题,并将结果组装成原始问题的解决办法。然后返回该解决办法。

哈哈,到这里大家是不是对递归有了一个更加深刻的认识。

如果还不清楚,没关系,这里还有更多的递归案例,用Python来实现,可以说非常简洁。

「最大公因数:」

def gcd(m, n):    if n == 0:        return m    else:        return gcd(n, m%n)

「从 1 到 n 的数字之和:」

def sumnums(n):    if n == 1:        return 1    return n + sumnums(n - 1)print(sumnums(3))

「字符串倒序:」

def reverse(string):    if len(string) == 0:        return string    else:        return reverse(string[1:]) + string[0]reverseme = '我是帅哥'print(reverse(reverseme))

「汉诺塔问题:」

def towerOfHanoi(numrings, from_pole, to_pole, aux_pole):    if numrings == 1:        print('Move ring 1 from', from_pole, 'pole to', to_pole, 'pole')        return    towerOfHanoi(numrings - 1, from_pole, aux_pole, to_pole)    print('Move ring', numrings, 'from', from_pole, 'pole to', to_pole, 'pole')    towerOfHanoi(numrings - 1, aux_pole, to_pole, from_pole)numrings = 2towerOfHanoi(numrings, 'Left', 'Right', 'Middle')

「二分法找有序列表指定值:」

data = [1,3,6,13,56,123,345,1024,3223,6688]def dichotomy(min,max,d,n):    '''    min表示有序列表头部索引    max表示有序列表尾部索引    d表示有序列表    n表示需要寻找的元素    '''    mid = (min+max)//2    if mid==0:        return 'None'    elif d[mid]<n:        print('向右侧找!')        return dichotomy(mid,max,d,n)    elif d[mid]>n:        print('向左侧找!')        return dichotomy(min,mid,d,n)    else:        print('找到了%s'%d[mid])        return res = dichotomy(0,len(data),data,222)print(res)

有位大佬说过:To Iterate is Human, to Recurse, Divine.

中文译为:人理解迭代,神理解递归。

可见递归是非常神奇的算法,它的神奇之处在于它允许用户用有限的语句描述无限的对象。

当然人无完人,递归也是有缺点的,它一般效率较低,且会导致调用栈溢出。

因为递归不断调用自身函数,且产生大量变量,而栈空间的容量是有限的,循环太多就会效率低下,甚至导致调用栈溢出

以上是“Python中递归算法怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中递归算法怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中递归算法怎么用

小编给大家分享一下Python中递归算法怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!递归是一种较为抽象的数学逻辑,可以简单的理解为「程序调用自身的算法」。
2023-06-29

Python递归算法怎么应用

递归算法是一种通过调用函数本身来解决问题的方法。在Python中,递归算法可以应用于各种问题,例如计算阶乘、斐波那契数列等。下面是一个计算阶乘的递归函数的例子:```pythondef factorial(n):if n == 0:retu
2023-08-15

python中什么是递归算法

本篇文章为大家展示了python中什么是递归算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均
2023-06-14

java递归算法怎么用

这篇文章给大家分享的是有关java递归算法怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直
2023-05-30

java递归算法怎么应用

Java递归算法可以应用于以下场景:1. 阶乘计算:递归可以用来计算一个数的阶乘。例如,计算n的阶乘可以定义为f(n) = n * f(n-1),其中f(1) = 1。```javapublic static int factorial(i
2023-08-09

vb递归算法怎么使用

VB递归算法使用步骤如下:1. 定义一个递归函数,函数中包含递归调用。2. 判断递归终止条件,即递归函数不再调用自身的条件。3. 在递归函数中调用自身,直到达到终止条件。4. 在递归函数中处理每个子问题的结果,最终得到整个问题的解。例如,下
2023-06-10

python斐波那契数列递归算法怎么用

要编写斐波那契数列的递归算法,可以按照以下步骤进行:确定递归的结束条件:斐波那契数列的前两个数为1和1,所以当序号为1或2时,返回1。定义递归函数:编写一个函数,接受一个整数n作为参数,返回斐波那契数列的第n项。在递归函数中处理逻辑:当n大
2023-10-22

怎么使用python递归算法求n的阶乘

你可以使用下面的代码来使用递归算法求n的阶乘:```pythondef factorial(n):if n == 0 or n == 1:return 1else:return n * factorial(n-1)# 示例调用result
2023-08-09

C#阶乘的递归算法怎么用

本篇内容主要讲解“C#阶乘的递归算法怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#阶乘的递归算法怎么用”吧!举例:下面是阶乘的递归算法,其中判断条件如果 num>0 则返回 num *
2023-06-17

c语言递归算法怎么应用

C语言递归算法可以应用于解决各种问题,特别是涉及到递归结构的问题。以下是一些常见的应用场景:1. 数学问题:计算阶乘、斐波那契数列、幂等计算等。2. 数据结构问题:树的遍历、图的遍历、链表的逆序等。3. 字符串处理问题:字符串反转、回文判断
2023-10-07

Java中如何使用递归算法

这篇文章给大家分享的是有关Java中如何使用递归算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、递归的定义递归,就是在运行的过程中调用自己。递归必须要有三个要素:①、边界条件②、递归前进段③、递归返回段当边
2023-06-28

Java的递归算法怎么优化

优化递归算法可以通过以下方法来实现:1. 尾递归优化:尾递归是指递归函数在调用自身之后没有其他的操作,直接返回递归函数的结果。尾递归可以通过将递归调用改为迭代来优化,减少了函数调用的开销。2. 记忆化搜索:在递归函数中使用一个数组或哈希表来
2023-08-15

java全排列递归算法怎么应用

全排列是一种经典的组合数学问题,递归算法可以很好地解决该问题。下面是一种Java递归算法实现全排列的例子:```javaimport java.util.ArrayList;public class Permutations {public
2023-09-23

c#递归算法代码怎么写

在C#中,可以使用递归算法来解决一些问题。递归算法是一种自我调用的算法,它将问题分解为更小的子问题,并通过递归调用解决这些子问题,最终得到整个问题的解。下面是一个使用递归算法计算阶乘的示例代码:```csharpusing System;c
2023-08-09

递归算法时间复杂度怎么算

递归算法的时间复杂度可以通过递归树来计算。递归树是一个树形结构,表示递归算法的执行过程。树的根节点表示原始问题,每个节点表示递归调用的一次子问题,叶子节点表示递归结束的情况。对于每个节点,我们需要计算它的时间复杂度。假设一个节点的问题规模为
2023-05-30

Java中的递归方法怎么用

小编给大家分享一下Java中的递归方法怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!递归方法定义本身调用方法本身的现象叫做递归在这之前我们学的东西:例如St
2023-06-22

python中怎么使用递归法求n的阶乘

在Python中,可以使用递归方法来计算n的阶乘。递归是指函数调用自身的过程。下面是一个使用递归法计算n的阶乘的示例代码:```pythondef factorial(n):if n == 0 or n == 1:return 1else:
2023-09-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录