Python学习-----函数4.0(递归函数习题)

news2024/11/15 21:43:34

目录

递归算法

1.进制数转换

2.阶乘递归

3.递归获取两个数之间最小公倍数

4.递归获取两个数字之间最大公约数

5.斐波那契数列

 5.递归求得数列的最值

6.倒序输出

7.递归二分法查找


递归算法

        递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。

也就是一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).

        在学习C语言的时候,我们学过函数的递归,同样在Python中也有递归函数,这一节我就以习题的形式去讲解递归函数,思路基本上是一样的。

1.进制数转换

输入一个十进制数,用递归来输出转换后的二进制数 

#递归进制数转换
def fun(n):
    if n:
        fun(int(n/2))
        print(n%2,end='')
    else:
        return
a=int(input(''))
fun(a)

基本思路就是对这个十进制数对2求余,然后除2去整,直到这个数字变为0,那就基本转换完成了

2.阶乘递归

输入一个整数,通过递归输出这个整数的阶乘

#递归阶乘
def kun(n):
    if n==0:
        return 1
    return kun(n-1)*n
m=int(input(''))

这个没什么好说的,基本做到烂

3.递归获取两个数之间最小公倍数

输入两个整数,输出这两个整数的最小公倍数

def fu(a,b,i=1):
    if i*a%b:
        i=i+1
        return fu(a,b,i)
    return a*i
x=int(input('num1:'))
y=int(input('num2:'))
print(fu(x,y))

这里就需要用到一个默认参数i,通过对i每次递归进行+1,直到a*i能够被b整除(求余为0),此时a*i就是最小公倍数了

4.递归获取两个数字之间最大公约数

输入两个数字a,b,输出这两个数字之间的最大公约数

#递归公约数
def ff(a,b):
    c=int(a%b)
    a=b
    b=c
    if b==0:
        return a
    return ff(a,b)
x=int(input('num1:'))
y=int(input('num2:'))
print(ff(x,y))

这个就直接利用辗转求余法,每次递归会获取a%b的值,然后依次进行a=b,b=c的赋值,直到被除数b为0,就结束,此时的a就是最大公约数

5.斐波那契数列

输入一个整数n,输出第n个斐波那契数的值

#递归斐波那契数列
def fuc(n,a=1,b=1):
    n = n - 1
    if n == 0:
        return a
    c=a+b
    a=b
    b=c
    return fuc(n,a,b)

x=int(input('你想要第几个斐波那契数:'))
print(fuc(x))

斐波那契数列问题已经是屡见不鲜了,就不多说了

 5.递归求得数列的最值

输入一组数字(存放到列表中),直到输入-1表示结束输入,输出这组数字中的最大值

示例:输入[1,5,8,9,4,6,22,5,6]

输出:最大值为22

#递归列表最值
def fmax(li,n=0,max=0):
    if li[n]>=max:
        max=li[n]
    if n<len(li)-1:
        n+=1
        return fmax(li,n,max)
    else:
        return max
li=[]
while 1:
    a=int(input(''))
    if a==-1:#如果输入-1就表示结束,而且-1不纳入列表当中
        print(li)
        print('最大值为',fmax(li))
        break
    li.append(a)

 这个输出最大值、最小值问题一般会先去初始化max=0,然后去把列表当中第一个数值赋给max,然后依次去跟li第二个、第三个数字进行比较,如果当第n个数字大于max时2,max就赋值为li[n]

6.倒序输出

输入一个字符串,然后倒序输出

#递归倒序输出(字符串)
def fyou(s,n=0):
    if n>=len(s):
        return
    fyou(s,n+1)
    print(s[n],end='')
st=input('输入字符串:')
fyou(st)

注意规则:先递归再输出,当递归到return的时候就把前面的内容全部输出来,所以输出的结果是最后一个字符开始,依次往前输出

7.递归二分法查找

输入一组数字(按照大小顺序输入放到列表当中),然后再次输入想要查找的数字,最后在这个数字列表输出这个数字的位置,如果找不到就返回-1

#递归二分法查找
def find(li,key,left,right):
    mid=int((left+right)/2)
    while left<right:
        if key>li[mid]:
            left=mid+1
            find(li,key,left,right)
        elif key<li[mid]:
            right=mid-1
            find(li, key, left, right)
        else:
            return mid #找到了就返回mid,也就是此时的位置
        return -1#找不到就返回-1
li=[]
while 1:
    a=int(input(''))
    if a==0: #如果输入0就表示结束输入
        key=int(input('输入你想要查找的数字:'))
        print(find(li,key,0,len(li)-1))
        break
    li.append(a)

递归二分法查找也就是在一组已排好序的数组当中去查找你想要的数字所在的位置,实际上是通过比较大小去查找的,先获取这个数组的中位数大小,然后跟要查找的数字进行大小比较,如果要查找的数字key大于中位数那么就把查找范围转移到右半部分,如果小于的话就把查找范围转移到左半部分,以此类推,直到找到这个数字为止,最后返回mid,也就是这个数字的所在位置

 

        这里我就讲这么多了,对于递归函数其实也没什么特别的,无非就是自己调用自己,直达满足一定的添加之后 就结束递归,然后就返回相应的结果,多看看一些题就会了的 ,今天就先讲这么多了,thanks~~~

分享一张壁纸~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署JDK+tomcat上线jspgou项目

系列文章目录 文章目录系列文章目录一、前言二、Tomcat部署1、Tomcat Http Server2、安装MySQL3、部署jspgou&#xff08;电子商城&#xff09;一、前言 什么是JAVA虚拟机 所谓虚拟机&#xff0c;就是一台虚拟的计算机。他是一款软件&#xff0c;用来执行一系列虚拟计算机指令…

背景透明(opacity vs background)

最近在做项目的时候&#xff0c;遇到透明度的相关设置。 常用的背景透明设置可分为两种&#xff0c;分别是&#xff1a; 一是给background设置透明度。二是利用opacity属性。 在跳了一些坑之后&#xff0c;本人更推荐给background设置透明度&#xff0c;为什么呢&#xff1f;…

【QCA6174】SDX12 WiFi QCA6174 bdwlan30.bin和bdwlan30.txt相互转化操作说明

1.从高通获bin文件和txt文件相互转化工具 软件包名称 QCA6174_BDF_Converter.zip 2.解压工具包&#xff0c;解压之后包括以下文件 3.从sdx12 sdk拷贝bdwlan30.bin 路径如下&#xff0c;将bdwlan30.bin放到QCA6174_BDF_Converter目录下 ./cnss_proc_firmware/cnss_proc/wlan…

Twitter账号老被封?一文教会你怎么养号

昨天龙哥给大家科普完要怎么批量注册Twitter账号&#xff0c;立刻有朋友来私信龙哥说里面提到的这个养号和防关联具体是个怎么样的做法。由于Twitter检测机制还是比较敏感的&#xff0c;账号很容易被冻结&#xff0c;所以养号是非常重要的步骤。其实要养好Twitter账号其实并不难…

docker-compose极速部署kafka3.2.0集群(含zookeeper集群)

极速部署kafka3.2.0集群准备工作&#xff1a;准备三台服务器部署Zookeeper集群部署kafka集群创建Topic开启JMX_PORTkafka集群管理工具使用的 KakfaStreaming准备工作&#xff1a;准备三台服务器 服务器地址缩写192.168.0.200200192.168.0.201201192.168.0.202202 一、完成服务…

格创东智与金羽新能合作|先进工业互联网助力固态电池智能化运营

2022年12月&#xff0c;浙江金羽新能源科技有限公司&#xff08;以下简称金羽新能&#xff09;与格创东智签订战略合作框架协议&#xff0c;并在湖州安吉举行金羽新能固态电池MES项目启动会。 固态电池是一种使用固体电极和固体电解质的电池。相较传统锂电池&#xff08;液态电…

Android开发初识

文章目录一 Android发展历程二 开发工具Android Studio的发展历程三 硬件要求四 Android Studio 的安装和使用一 Android发展历程 安卓&#xff08;Android&#xff09;是一种基于Linux内核&#xff08;不包含GNU组件&#xff09;的自由及开放源代码的操作系统。 由美国Google公…

解药 or 毒药:ChatGPT辅助设计,规划师和建筑师要失业了吗?

​人工智能聊天机器人ChatGPT火爆全球&#xff0c; 规划师笔记也紧赶潮流&#xff0c;快速尝试&#xff0c; AI与设计发生碰撞&#xff0c; 会产生怎样的火花&#xff1f; 运用AI帮助写文案、作图、视频剪辑、游戏制作等等随着2021被称为元宇宙元年&#xff0c;近些年来AI在…

中国地图航线图(echarjs)

1、以上为效果图 需要jq、echarjs、china.json三个文件支持。以上 2、具体代码 DOM部分 <!-- 服务范围 GO--> <div class"m-maps"><div id"main" style"width:1400px;height: 800px; margin: 0 auto;"> </div> <!-…

【Java基础】021 -- 常见算法及API(查找、排序、Arrays)

目录 常见算法 1、企业中的常见算法 一、查找算法 1、基本查找&#xff08;数据没有任何顺序&#xff09; ①、代码实现&#xff1a; ②、课堂练习&#xff1a; 2、二分查找/折半查找&#xff08;数据一定要有顺序&#xff09; ①、示例情况&#xff1a; ②、代码实现&#xff…

一文搞懂ECU休眠唤醒之利器-TJA1145

前言 首先&#xff0c;小T请教大家几个小小问题&#xff0c;你清楚&#xff1a; 什么是TJA1145吗&#xff1f;你知道休眠唤醒控制基本逻辑是怎么样的吗&#xff1f;TJA1145又是如何控制ECU进行休眠唤醒的呢&#xff1f;使用TJA1145时有哪些注意事项呢&#xff1f; 今天&…

自动化测试的12个认识误区给后人避坑

自动化测试的12个认识误区 1、自动化的软件测试与手工的软件测试过程一样 自动化测试所需要的技巧与手工测试所需要的技巧是不一样的。 通常&#xff0c;你的项目经理会被那些测试工具销售们迷惑&#xff0c;认为自动化的软件测试就是简单地按一个录制的按钮&#xff0c;产…

电脑风扇声音大怎么办?五个好用的方法【完整教程】

电脑风扇可以电脑更好地运行&#xff0c;但是很多小伙伴投稿&#xff0c;说它们的电脑风扇不知道什么原因&#xff0c;风扇的声音很大。电脑风扇声音大怎么办&#xff1f;来看本文讲解的5个原因以及对应的解决方法。 操作环境&#xff1a; 演示机型&#xff1a;Dell optiplex 7…

如何备考pmp才能一次通过?

只有努力学习PMP知识&#xff0c;才能一次性通过这次考试&#xff0c;这是大家公认的。 但一味地埋头学习是枯燥而低效&#xff0c;学习还是要注重方法&#xff0c;下面我就来谈谈PMP的学习方法&#xff0c;希望能够帮助到你&#xff0c;一把通过pmp考试。 把PMBOK当作小说来…

Redis三 高级篇-2. 多级缓存

多级缓存 《Redis三 高级篇-2. 多级缓存》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Redis三 高级篇-2. 多级缓存》多级缓存《Redis三 高级篇-2. 多级缓存》1. 什么是多级缓存2. JVM进程缓存2.1 导入案例2.2 初识Caffeine2.3 实现JVM进程缓存2.3.…

网络编程套接字Socket

一.什么是网络编程网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数据传输&#xff09;。二.为什么要实现网络编程我们通过网络编程可以在网络中获取资源&#xff0c;实质是通过网络&#xff0c;获…

滑动相关的原理以及用滤波器实现滑动相关(匹配滤波器捕获DMF)

目录滑动相关匹配滤波器捕获&#xff08;DMF&#xff09;滑动相关 滑动相关属于一种时域捕获方法&#xff0c;其具体原理是是通过本地序列与接收信号在固定窗长内滑动累加得到相关结果。 一般滑动相关算法可以用于对自相关性非常好的伪码进行同步判决。 我们首先生成一组自相关…

【大数据】第三章:详解HDFS(送尚硅谷笔记和源码)

什么是HDFS HDFS是&#xff08;Hadoop Distributed File System&#xff09;的缩写&#xff0c;也即Hadoop分布式文件系统。它通过目录树定位在分布式场景下 在不同服务器主机上的文件。它适用于一次写入&#xff0c;多次读出的场景。 HDFS的优缺点 优点 1&#xff0c;高容…

leaflet 添加zoomslider,控制zoom放大缩小(074)

第074个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中使用zoomslider,相比于普通的zoom控件,这个更加形象,更加具体些。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共65行)相关API参考:专栏目…

14_FreeRTOS二值信号量

目录 信号量的简介 队列与信号量的对比 二值信号量 二值信号量相关API函数 实验源码 信号量的简介 信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。 假设有一个人需要在停车场停车 1.首先判断停车场是否还有空车位(判断信号量是否有资源) 2.停车场正好…