python中递归函数的轨迹_7分钟带你搞定Python函数递归问题_罗思明的博客-程序员宅基地

技术标签: python中递归函数的轨迹  

本期笔记内容综述Python函数定义再回顾

函数的参数传递

Python函数递归问题

aab6f229950b2d4aa4cfe83a7e563757.png

7分钟学习系列

1.Python函数再回顾著名的斐波拉契数列

除了第一个数和第二个数外,任意一个数都可由前两个数相加得到:1,1,2,3,5,13,21,34····

且先看看定义F1=1 F2=1

将上面文字转化为符号语言:Fn=Fn-1+Fn-2 n>2

由于Python索引号从0开始,因此我们把开始改为0.

代码运行[1]

00ef01c46a3565f6cda5710035aece85.png

且先看看前几项问题:如果你想自定义斐波拉契数列的个数该如何是好?'

代码运行[2]

fa1608cc8c9e402c4d9fa4b21c862782.png

for 循环'函数该如何写呢?'

58e0a2a1ac0d972bfa9c4774bb4b61f3.png

函数结果问题:如果只要展示指定的斐波拉契数列数呢?

283bf451dfa421f2c0e2705af4bd19c1.png

运行结果'range()函数再介绍'

range(i,j,[步长值]),默认步长为1,创建的对象表示值为i到j-1的整数。

db2f1117f9353bba93c9aba513ffb6ee.png

rang( )函数

2.Python函数的参数传递从一个栗子开始:梯形面积:Trapezoid area

我们来设计一个名为:Trapezoid_area的函数计算梯形的面积

三个参数分别为:base_up(上底),base_down(下底),height(高)

梯形的面积=(上底+下底)×高÷2代码运行

d0be2c21d718d29f4efe314a839b56a8.png

运行结果'不难看出来参数1,2,3分别对应base_up(上底),base_down(下底),height(高)。

提供关键字参数传导关键字参数传导如何调用呢?

方法:在调用函数名后面圆括号内(参数关键字2=参数值,参数关键字1=参数值),不必拘泥于原来的顺序了。

代码运行[1]

a80acb70a65ca5ae375dbc6e166f282f.png

代码运行结果代码运行结果[2]

757fe88581438eb3f18a11a11363fae1.png

结果2'调用函数提供参数的时候,按顺序传递的参数是要位于关键字参数之前,而且不能有重复的情况'

3.Python函数递归问题重大问题:递归

我想递归这个词大家最初接触的时候是曾经了解数列的时候,

其实我们之前给出的斐波拉契数列就是一个递归,可以无穷的进行下去。

接下来我们再看两个常见的递归:阶乘和幂

3.1阶乘

debf14f3ddfe6ec7fa9555b4a4b48ca3.png

且先看排列且看栗子:

2d19cc3f86c6a474336af00359d5a2b8.png

代码1递归写法

28b45f366956708b9cd2e15ccd729107.png

递归结果

3.2 幂

35ee4b250233bd1427ef2c30a4e33fd5.png

基础函数写法'更改为递归模式:'

1.对于任意数字x来说,power(x,0)结果是1,任何数的零次幂都是1

2.对于任何大于0的数来说,power(x,n)是x乘以power(x,n-1)

其实写递归首先要做的是理解概念

7c55af7a74b92196a117010838a1cf46.png

递归结果'可是我还是没看出递归到底和循环的帮助有多大?'

'还记得昨天的课后题吗?'

上一期笔记内容问题解答回顾问题

9184d3f87a83338fd57dc5ec16dfaa55.png

问题回顾'现在来看看当初绞尽脑汁写的上面这串代码吧,来思考下如何写它的递归''''首先我们来总结下前面两个的递归的例子的方法:

1.核心:找到一个初始值,再找到一个递归循环部分;

2.初始值:最外层没进行的递归部分的最开始的基本实例反应值;{递归一定要有函数返回值,否者就永不停止了}

3.递归部分:找到重复出现的部分,如前两个栗子中相邻两个的关系:第n个和第n-1的结果的关系即递推式.

4.用条件语句中一个分支写初始值的,一部分写递归循环部分调用自身的函数。

5.关键:理解定所要做的事情的含义。#其实可以参考数学归纳法来理解isinstance( )函数是检查某个特定的标识符是否含有某个数据类型,在这里之所以写出上面如此复杂的函数:是因为单独的一个for循环下来,列表中的列表是全部打印出来,而不能全部按行提取出来

重新观看代码,很快我们发现:

569537621d33298d5e38f78d15d923fd.png

代码问题

1.上面代码12行和34,56,7行基本一致,只是换了个元素名和列表名在重复。从这里我们可以找递归循环体

2.根据意图可知:都在做一件事情,判断元素是否属于列表,如果不是就输出元素(初始对应值),如果是继续操作下去(递归循环体部分)。

3.代码运行:

ba8936cc0ec65021448b385aa9365c98.png

问题答案对比下两段代码,我相信你一定体会到递归的方便的吧。

程序员在解决问题位目标的基础下,应该学会偷懒。

不管影迷的信息需要多少更深层的嵌套列表,递归函数不需要做任何改变可以任意处理。

3.3 二分法原理要求:必须掌握,请自己编写一个二分法的操作,不要局限于下面代码。

'''首先什么是二分法呢?先看看定义确保自己知道接下来在做什么。前提:排好序

若上下限相同,则那就是数字所在位置,返回;

否则,找到两者的中间,查找数字是在左侧还是右侧,继续查找数字所在的那半部分。在给出的有序排列的数组中,把目标值和数组中间值进行比较,

1.如果相等,则返回中间值下标,

2.如果目标值小于中间值,就从数组的前半段(左侧)再次执行二分法查找,

3.如果目标值大于中间值,从数组的后半段(右侧)开始二分法查找。代码运行

f2c54af64e26a4edbd0b81dcafe004d0.png

二分法很抱歉,似乎内容已经超过7分钟来理解了。

好了,本期笔记分享内容就到此以歉意结束,茄子暂别,每天都美好。祝愿生活愉快!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42497772/article/details/114946222

智能推荐

eslint --fix 'eslint' 不是内部或外部命令_做一个有知识的流氓的博客-程序员宅基地

eslint --fix 'eslint' 不是内部或外部命令报错场景:有一个以前写的文件之前没用eslint,现在放vue-cli创建的项目里面一片红,然后就想用eslint --fix,但在命令行里报错解决办法: 其实这个不算什么解决办法,曲线救国?,我用的是webstrom编辑器,用vue-cli创建的项目已经配置好了eslint,所以在编辑器里右键菜单,会看到下图,下面那个选项,其实就是执...

Windows/Android平台视频同屏功能组件EasyScreenLive-Win开启RTSP服务如何获取本机地址?_TSINGSEE的博客-程序员宅基地

经过这么多年的视频技术开发,TSINGSEE青犀视频团队已经有了一套自己的研发体系,除了大家比较熟知的视频智能分析平台外,其实TSINGSEE青犀视频还有很多好用的SDK及工具。其中EasyScreenLive就是我们研发的一款简单、高效、稳定的同屏功能组件。EasyScreenLive可以提供一个轻量级的RTSPSERVER服务,其中Win版测试调用方法中是通过以下定义的接口函数完成://开始RTSP服务 LIB_EASYSLIVE_API int EasyScreenLive_StartS

blockchain 区块链200行代码:在JavaScript实现的一个简单的例子_Aligator的博客-程序员宅基地

了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上的)数据库支持主办记录日益增长的名单。但是,这也是容易混淆blockchain与我们试图帮他解决了目标 - 在人们心中的那一刻,这个词是相当强烈的交易,合同或智能cryptocurrency的概念有关。只有在这里blockchain - 是不是一回事比特币,并理解链块的基本知识比它似乎...

Spring Boot : 整合 Shiro 重写 DefaultWebSessionManager_帅气Dee海绵宝宝的博客-程序员宅基地

SpringBoot整合shiro 重写 DefaultWebSessionManager正常来讲 Shiro 是从 Cookie 中获取 SessionId 的,然后找到相对应的 Session来保证用户登陆的正确性和权限的正确性,但是在前后端分离的项目中,由于每次的 SessionId 都是不一样的,所以我这里选择的是重写DefaultWebSessionManager 的部分方法,然...

安装python3后出现 坏的解释器 yum找不到_K_Lily的博客-程序员宅基地_python3没有yum

问题:Linux安装Python3.X版本之后,运行yum指令的时候提示-bash: /usr/bin/yum/usr/bin/python: 坏的解释器: 没有那个文件或目录修改一下两个文件的配置/usr/bin/yum/usr/libexec/urlgrabber-ext-down因为yum是依赖于Python2的,所以需要将文件头部的声明路径改回python2.7...

CIFAR10/CIFAR100数据集介绍_weixin_33949359的博客-程序员宅基地

CIFAR-10/CIFAR-100数据集解析觉得有用的话,欢迎一起讨论相互学习~Follow Me参考文献CIFAR-10/CIFAR-100数据集CIFAR-10和CIFAR-100被标记为8000万个微小图像数据集的子集。他们由Alex Krizhevsky,Vinod Nair和Geoffrey Hinton收集。CIFAR-10数据集CIFAR-10数据集由10个类的60...

随便推点

【白帽子学习笔记6】 NTFS安全权限_AndSonder的博客-程序员宅基地

【白帽子学习笔记6】 NTFS安全权限文章目录【白帽子学习笔记6】 NTFS安全权限一、NTFS权限概述二、文件系统概述三、NTFS特点四、修改NTFS权限一、NTFS权限概述1、通过设置NTFS,实现不同用户访问不同对象(文件,文件夹)的权限2、分配了正确访问权限后,用户才能访问不同的权限3、设置权限防止资源被篡改、删除二、文件系统概述文件系统即在外部存储设备上组织文件的方法常见的文件系统FAT windowsNTFS windowsEXT linux常

函数规律(字符串处理 + 找规律)_SlienceAccept的博客-程序员宅基地

题目链接 下面我将描述一个简单的函数:                       &amp

解决 c#连接Oracle 提示system.data.oracleclient 需要 oracle 客户端软件 8.1.7 或更高版本_java干货的博客-程序员宅基地

最近在做winform,需要远程连接Oracle,本来测试的都顺利。但是到客户那里了抛出了 system.data.oracleclient 需要 oracle 客户端软件 8.1.7 或更高版本 这个错误!这个意思就是需要安装Oracle客户端,但是给客户打包好的客户端还需要客户安装一个Oracle客户端有点不太现实啊!没办法,忍者过来了,中午客户去吃饭,偷偷的给客户的电脑安装了Orac

Ubuntu设置窗口管理器_gracioushe的博客-程序员宅基地_ubuntu 窗口管理器

gnome使用的是GDM窗口管理器<br /><br />切换用命令:sudo dpkg-reconfigure kdm or sudo dpkg-reconfigure gdm另外使窗口管理器设置立即生效使用:sudo gdm restart

nacos心跳报文,随机抽出一条格式化看看_riabai的博客-程序员宅基地

nacos用了挺久了,今天记录一下控制台打印的1.4.1心跳报文,随机抽出一条格式化看看{ "type": "dom", "data": { "name ": "DEFAULT_GROUP @ @order-service", "clusters ": "", "cacheMillis ": 10000, "hosts ": [{ "instanceId": "192.168.120.123 #7001# DEFAULT# DEFAULT_GROUP @ @order-se.

javacv实现屏幕录制(一)_漫浅的博客-程序员宅基地_javacv 录屏

javacv实现屏幕录制(一)javacv从入门到入土系列,发现了个好玩的东西,视频处理,于是我想搞个屏幕录屏,我百度了一下,copy那些代码我没有实现过,那些代码也没有说明,只好去官网看文档找资料了看wiki和example了emm,,,这里我使用javafx进行页面显示。思路,用FFmpegFrameGrabber创建屏幕录制采集,将采集到的帧数据追加到FrameGrabber,用FrameGrabber做视频输出。。。按照这个思路,你也能把数据采集改成摄像头采集。依赖 &lt;

推荐文章

热门文章

相关标签