python数据结构与算法 21 递归的实现和应用

数据结构与算法(python)(数据结构) 整理了数据结构的基础内容,包括列表、栈和队列、链表、哈希表和树的相关知识点 阅读详情

把一个整数变成一个任意进制的字符串

假设你要把一个整数转变成一个从2到16进制的数字组成的字符串,例如,把整数10变成十进制是“10”,二进制就是“1010”。虽然很多算法能够实现,包括在栈的应用中我们讨论过一个算法,但是递归的算法仍然是最简洁的。

先来看个例子,十进制数769。我们有一个字符串,含有10个数字的字符串,类似covString=”0123456789”。那么把一个小于10的数字变成串很简单,如果是数字9,字符串就是convString[9]或“9”。如果我们769分解成3个单数,就是7,6和9,然后分别转成字符串,这样小于10的数字转起来很简单。

估计基点算法要包括三个部分

1.   把原数字转成一串的个位数

2.   把个位数查表转成单个数的字符串

3.   把各个字符串合并

下一步就要考虑怎样改变状态趋向基点。既然处理对象是整数,我们来看一下在数学上是怎么办的。最可能选项是减法和除法,减法也许能行?拿什么减什么呢?不太清楚。然而除法和余数的想法给了一个明确的方向。来看一下,如果用基数来除整数,是什么情况.

用整数10去除769,得到76余9,得到两个数。首先,余数9是小于基数(10)的个位数,能够通过查表迅速转成字符串。其次,得到的商(76)小于原来的769,并朝向基点变动.现在的工作是把76变成字符串,再次用10去除76,得到7余6,现在我们把数字变成了个位数7,小于基数10,可以很容易处理成字符串。

这一连串的操作如图3所示,注意我们要的数字是图解右边的余数。


图3:转换整数为十进制字符串

代码段是算法的实现,基数可以是2-16之间的整数。

def toStr(n,base):
   convertString = "0123456789ABCDEF"
   ifn<base:
      returnconvertString[n]
   else:
      returntoStr(n//base,base)+convertString[n%base]
 
print(toStr(1453,16))


注意第3行我们检查n是否小于进制的基数,,如果是,不用递归,直接从字符串上获得结果。第6行包括了第二和第三定律——自我调用和趋向基点改变状态——使用除法。

我们再跟踪一次算法,这次转化数字10为二进制。



图4整数10转为二进制字符串

图4所示为求得结果的过程,但是看起来顺序似乎不对,但是计算结果又是对的。这是因为我们的递归计算放在前面,这样直到递归结束才会去加余数。如果我们把convertString[n%base]这个式子放在前面,先查找余数的字符串再去计算递归,那么结果就完全反了顺序!但是我们先做递归,直接递归结束返回结果再去和余数相加,结果的顺序就是正确的。这应该让你想起我们在讨论栈时候计算的过程。

堆栈帧:递归的实现

假设我们要把上节递归调用中的toStr和convertString换一下位置,就要修改算法,把字符串压栈,以优先做递归调用。这个修改后的算法如下:

frompythonds.basic.stackimportStack
 
rStack = Stack()
 
deftoStr(n,base):
    convertString ="0123456789ABCDEF"
    whilen>0:
        ifn<base:
            rStack.push(convertString[n])
        else:
            rStack.push(convertString[n%base])
        n = n//base
    res = ""
    whilenotrStack.isEmpty():
        res = res+str(rStack.pop())
    returnres
 
print(toStr(1453,16))


每次调用toStr,我们都把一个字符压栈。回到此前的例子,我们看到经过四次调用toStr,栈内容如图5所示。注意现在我们可以简单地把字符出栈并合并成为答案:“1010”。


图5转化过程中栈内的字符


这个例子让我们得以窥到python是如何实现递归函数调用的。当调用一次函数,系统分配一个堆栈帧来存储函数的变量,当函数返回时,返回值就存在栈顶等待调用函数访问。图6所示是第4行返回语句之后的调用栈情况。


图6 toStr(10,2)产生的调用栈

注意对toStr(2//2,2)的调用,留下“1”在栈内,这个值陏后在调用toStr(1,2)时,表达式"1" + convertString[2%2]用到。然后它又留下"10"在栈顶。这样,python调用栈的过程和我们在递归求和时所有过程明显一样。在求和算法中,你可以认为栈内返回值替换了累加器变量。

堆栈帧也提示了python语言变量作用域的概念,虽然我们一遍又一遍调用函数,但每次都为函数变量开辟了独立的变量作用域。

如果牢牢记住这个栈的思想,你将会发现写递归函数变得容易多了。



Python 数据结构与算法详解 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。1. 排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持其相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录 R 和 S,且在原本的列表中 R 出现在 S 之前,在排序过的列表中 R 也将会是在 S 之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。 阅读详情

相关推荐

探索Python中的斐波那契数列:实现与应用

斐波那契数列是一个从0和1开始的序列,其中每个数字都是前两个数字的和。F00F11FnFn−1Fn−2n≥2F00F11FnFn−1Fn−2n≥2通过本文,我们详细介绍了如何在Python中实现斐波那契数列的前n项,并探讨了递归、迭代和动态规划三种方法。每种方法都有其优缺点,选择合适的方法取决于具体的应用场景和性能要求。希望这篇文章能帮助你更好地理解和应用斐波那契数列。如果你有任何问题或需要进一步的帮助,请随时联系我。

铭渊老黄 184

python数据结构及算法

python数据结构及算法 一. 数据结构与算法 1. 算法的概念:算法是独立存在的一种解决问题的方法和思想 2. 算法的特征:输入,输出,有穷性,确定性,可行性 3. 时间复杂度是实现算法程序所需要的时间,即算法的优劣 4. 数据结构是指数据对象中数据元素之间的关系 5. 程序 = 数据结构 + 算法 6. 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体 二. 顺序表 1. 顺...

weixin_45841852的博客 2839

用C++从零复刻Wordle:手把手教你实现命令行猜词游戏(含完整源码解析)

本文详细介绍了如何使用C++从零开始实现一个命令行版本的Wordle猜词游戏,包含完整的源码解析和核心模块设计。通过游戏逻辑控制器、单词库管理器等模块的构建,开发者可以学习C++实战技巧和性能优化方法,适合提升编程能力和游戏开发兴趣。

weixin_26763955的博客 334

Python数据结构与算法

https://zhuanlan.zhihu.com/p/478635700

qq_35224503的博客 5618

ABAQUS地应力平衡方法详解

在岩土工程数值分析中,首先要对模型进行初始地应力平衡计算。ABAQUS有限元软件有五种初始地应力平衡方法:①自动平衡法;②关键字定义初始地应力法(或在界面操作);③ODB导入法;④初始应力提取法;⑤用户子程序SIGNI法。由于第五种方法需要一定的编程基础,操作起来太复杂不易掌握,故本文只讲解较为实用的前四种平衡方法。 地应力平衡的目标:使土层在自重作用下的变形很小----不存在初始位移,只存在初始应力。一般情况下,最大位移达到10-4次幂以下就可以了。 ①自动平衡法 (如果土体采用线弹性,且比较规则,

m0_69808458的博客 3万+

点云配准实战:用DGCNN+Transformer+SVD搞定3D模型对齐(附PyTorch代码)

本文详细介绍了基于深度学习的点云配准实战方法,重点解析了Deep Closest Point (DCP)模型。该模型融合了DGCNN、Transformer和可微分SVD三大核心模块,能够端到端地预测点云间的刚性变换,有效克服传统ICP算法对初始位置敏感、易陷入局部最优的缺点。文章提供了完整的PyTorch代码实现、ModelNet40数据集处理、训练策略及显存优化技巧,旨在帮助开发者在机器人、自动驾驶等领域实现精准的3D模型对齐。

weixin_29061041的博客 153

Python数据结构与算法-数据结构(列表、栈、队列、链表)

python的数据结构与算法

little_limin的博客 4333

手把手教你学Simulink——四开关 Buck‑Boost(FSBB)变换器的无缝模式切换仿真

本文详细介绍了四开关Buck-Boost(FSBB)变换器的Simulink仿真方法,重点解决模式切换时的直通风险和输出电压波动问题。通过统一电压PI控制、迟滞比较模式仲裁(Buck/Boost/Pass-Through)和200ns死区设计,实现了Vin从26V到22V变化时Vout稳定在12V±0.15V。关键步骤包括:搭建功率级电路、Stateflow模式判断、PI控制器输出占空比映射(Buck模式D≈Vo/Vin,Boost模式D≈1-Vo/Vin),以及带死区的PWM信号分配。仿真验证了切换过程中

MHD0815的博客 116

python数据结构算法_数据结构与算法:Python语言实现

数据结构与算法:Python语言实现编辑锁定讨论上传视频《数据结构与算法:Python语言实现》是2019年11月机械工业出版社出版的图书,作者是[美]迈克尔T.古德里奇(Michael T.Goodrich)、罗伯特·塔马。书 名数据结构与算法:Python语言实现作 者[美]迈克尔T.古德里奇(Michael T.Goodrich)、罗伯特·塔马ISBN978711160660...

weixin_39887926的博客 871

ROS与Qt5人机交互界面开发:添加rviz显示界面

最后,点击"完成"以创建新的Qt5应用程序项目。通过结合ROS和Qt5,您可以创建强大的人机交互界面,以实现丰富的机器人控制和数据可视化。在本教程中,我们将在主窗口中创建一个简单的按钮,用于启动rviz显示界面。在Qt Creator的槽函数编辑器中,为按钮添加一个槽函数,该函数将在单击按钮时调用。在上面的代码中,我们使用QProcess类启动了一个新的进程,并执行"rviz"命令来启动rviz显示界面。当您单击Qt5应用程序中的按钮时,将会启动一个新的rviz窗口,显示机器人数据的可视化界面。

CodeJolt的博客 2067

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5267

数据结构与算法——7. 递归:递归的概念与实现

文章目录一、递归( Recursion)的概念1. 递归的简单应用:数列求和问题使用循环算法解决使用递归算法解决2. 递归程序的执行过程3. 递归三定律二、递归调用的实现1. 递归与栈的关系2. Python对递归深度(递归调用次数)的限制 一、递归( Recursion)的概念 递归是一种解决问题的方法,其精髓在于将问题分解为规模更小的相同问题,持续分解,直到问题规模小到可以用非常简单直接的方式来解决。 递归算法最显著的特征就是:在算法流程中调用自身。 1. 递归的简单应用:数列求和 问题 给定一个列表,

花城的博客 2271

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2871

[好课推荐]数据结构与算法python实现

[好课推荐]数据结构与算法python实现 觉得有用的话,欢迎一起讨论相互学习~ 官方地址: 中国大学MOOC 主讲人: 北京大学陈斌老师,中国人民解放军陆军装甲兵学院徐丙立老师 https://www.icourse163.org/course/0809PKU068-1206307812 B站也有UP主提供的链接 以下为官网信息,别说了,课程设置超级好~AWSL!!! 课程概述 本课基于主讲教师在北京大学讲授数据结构与算法课(Python版)的多年教学实践经验,面向具有Python语言程序设计基础的大

泛用演化计算、通用人工智能优化模型 1937

如何使用 SAP ABAP Development Tool 连接 SAP BTP 上的免费 ABAP 编程环境

在云端环境编写 ABAP 代码会遇到一些限制,比如你无法在云端 ABAP 编程环境进行发生在传统 SAPGUI 里的 Dynpro 和 Screen 编程。部分在 SAPGUI 里使用的 List 处理相关的关键字比如 WRITE,还有 CALL TRANSACTION 等代码,也无法在云端使用。 当然如果大家觉得上面提到的这些限制不会影响自己的 ABAP 学习,就可以继续本文的阅读,使用 ABAP Development Tool 登录云端的 ABAP 编程环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1517

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数据结构与算法python语言实现_数据结构与算法:Python语言实现

出版者的话译者序前言致谢作者简介第1章 Python入门 11.1 Python概述 11.1.1 Python解释器 11.1.2 Python程序预览 11.2 Python对象 21.2.1 标识符、对象和赋值语句 21.2.2 创建和使用对象 41.2.3 Python的内置类 41.3 表达式、运算符和优先级 81.4 控制流程 121.4.1 条件语句 121.4...

weixin_39789094的博客 823

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据结构和算法 python和c++语言描述_数据结构和算法 Python和C++语言描述

目 录第 1 章 抽象与分析 11.1 概要 11.1.1 大型编程. 11.1.2 前方的道路 21.2 功能的抽象 31.2.1 契约式设计 31.2.2 验证先验条件 61.2.3 自上而下的设计. 91.2.4 记录副作用. 111.3 算法分析. 121.3.1 线性搜索 121.3.2 二分搜索 141.3.3 非正式的算法比较. 151.3.4 算法的正式分析 17目 录第 1 章 ...

weixin_39559015的博客 242

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[Python] 数据结构与算法笔记(基本结构和递归)

目录1.基本结构1.1 栈1.1.1 栈的操作1.1.2 栈的应用——简单括号匹配1.1.3 栈的应用——十进制转换成二进制1.1.4 栈的应用——表达式转换1.2 队列1.2.1 队列的操作1.2.2 队列的应用——热土豆问题1.2.3 队列的应用——打印任务几个小算法读取以空格分隔的一行整数 1.基本结构 1.1 栈 “后进先出 LIFO” 进栈和出栈的顺序正好相反 e.g. 浏览器的后退,word的undo 抽象数据类型“栈”是一个有次序的数据集,每个数据项仅从“栈顶”一端加入到数据集中、从数据集中

今天你DEBUG了吗 722

数据结构—排序算法(python实现)

主要介绍了python中实现排序算法的方式与代码

qq_62780060的博客 1204

python 递归深度优先搜索与广度优先搜索算法模拟实现

(1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1、写出临界条件 2、找出这一次和上一次关系 3、假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果 (3)案例分析:求1+2+3+…+n的数和? 概述 ‘’’ 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! ‘’’ 写递归的过程...

weixin_44767512的博客 230

数据结构与算法(python)递归:找零问题

参考自 MOOC数据结构与算法Python版 目录一、什么是递归Recursion初识递归数列求和递归“三定律”递归的应用任意进制转换Python中的递归深度限制递归可视化:分形树Python的海龟作图系统turtle module 一、什么是递归Recursion 递归是一种解决问题的方法,它将问题分解为规模更小的相同问题,在算法流程中调用自身 初识递归 数列求和 问题: 给定一个不定长列表, 返回所有数的和。需要一个循环和一个累加变量来迭代求和。 举个例子: 求全括号表达式的和: total=(1+(3

番茄大人的博客 1396

Python 递归的练习

递归的练习 递归的了解实例 1 # 定义一个类(num是需要给出的参数) 2 # 一定要有临界值 3 # 要有递推的关系 4 def digui(num): 5 6 # 打印num 7 print('$'+str(num)) 8 9 # 如果num大于0 10 if num >...

a18798010127的博客 413

python数据结构与算法 20 递归和递归三定律

递归 本章目标 理解很多复杂问题,如果不用递归就很难解决,用递归也许非常简单 学会怎样进行递归编程 理解并应用递归三定律 理解递归也是一种迭代 建立一个问题的递归方法 理解递归在计算机系统内是如何进行的。 什么是递归? 递归是解决问题的一种方法,它把问题拆解得越来越小,直到变得非常容易,一般情况下,递归过程要包括一个自我访问的函数。与表面看起来似乎不一样,其实递归允许我们写出非常简

量变到质变 3863

数据结构与算法Python版(完整版)P8

大O表示法 Python数据结构 抓大头,数量级 决定运行时间的不仅是问题规模,还跟工况有关,平均状况 常见的七种 P10 变位词判断问题 问题: 解法1 解法2:先排序后比较 def paiXU(s1,s2): a=list(s1) b=list(s2) a.sort() b.sort() pos=0 matches=True ...

weixin_43332626的博客 1578

python dfs算法_python学习课程目录

一、基础篇1.1 Python语言编程导论本节主要介绍什么是python语言,它有什么用、能做什么,相比其他语言它有什么优势,以及它的发展历史与最新的应用成果。1.2 Python编程环境搭建和规范本节主要介绍如何搭建python编译和运行环境、python的代码结构以及python编码规范。1.3 Python基础语法介绍本节主要介绍python的一些基础语法知识,主要包括变量和常量、数据类型、...

weixin_39806779的博客 394
上一篇: python数据结构与算法 20 递归和递归三定律
下一篇: python数据结构与算法 22 递归图形
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值