【Python递归练习】

article/2025/10/24 16:30:40

1.出售金鱼问题第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼。问这鱼缸里原有多少条金鱼?

题目分析:

得知最后还剩11条金鱼,用递归法以此类推出第四次、第三次、第二次、第一次出售前金鱼的数量。

得到递归函数:result=(Fish(i+1)+(Fish(i+1)+1)/i)。

代码

def fish(n): #第几次卖鱼时共有多少条鱼if n == 5:return 11else:return ((n+1)/n)*(fish(n+1)+1/(n+1))# return (fish(n+1)*(n+1)+1)/n #化简后的表达式n = eval(input())
print(fish(n))

运行结果


2.某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘客;到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个……,到了终点站车上还有乘客六人,问发车时车上的乘客有多少?

题目分析

递归出口:终点站有六名乘客

递归体:num(i)=(num(i+1)-8+i)*2  //计算到第i站车上的人数

那么到达第2站时车上的人数就是发车时车上的乘客数

代码

def num(i):if i == 8:  # 终点站return 6else:return (num(i+1)-8+i)*2i = eval(input())
print(num(i))

运行结果


 3.猴子吃桃。有一群猴子摘来了一批桃子,猴王规定每天只准吃一半加一只(即第二天吃剩下的一半加一只,以此类推),第九天正好吃完,问猴子们摘来了多少桃子?

代码

def peach(n):if n > 9:return 0elif n == 9:return 2  # 第九天还有两个桃子,都被吃了else:return (peach(n+1)+1)*2print("猴子们摘来了:{}个桃子".format(peach(1)))
sum = peach(1)
for i in range(1, 10):print("第{}天吃了{}个桃子,剩余桃子数为{}". format(i, sum-peach(i+1), peach(i+1)))sum = peach(i+1)

运行结果


4.小华读书。第一天读了全书的一半加二页,第二天读了剩下的一半加二页,以后天天如此……,第六天读完了最后的三页,问全书有多少页?

代码

def num(n):if n > 6:return 0elif n == 6:return 3else:return (num(n+1)+2)*2print("全书共:{}页".format(num(1)))
sum = num(1)
for i in range(1, 7):print("第{}天读了{}页,剩余{}页". format(i, sum-num(i+1), num(i+1)))sum = num(i+1)

运行结果

5. 30个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?

题目分析

由题意可知,一次可以上一阶或两阶阶梯,由此可以列出当有一阶,两阶,三阶,四阶,五阶…它们的走法,可以推导出递推公式。

因为只能是一阶一阶上或者两阶两阶上,所以到达顶点的最后一步不是一阶就是两阶,倒数第二步也是这样

 边界条件:当阶梯数为1和0时,都只有一种走法

递推公式:step(n)=step(n-1)+step(n-2)

代码

def step(n):if n <= 1:return 1else:return step(n-1)+step(n-2)n = eval(input())
print(step(n))

运行结果

6汉诺塔问题

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?

用python程序计算次数:

1

2

3

4

5

6

7

def f(n):

    if n==0:

        return 0

    else:

        return 2*f(n-1)+1

x=int(input("请输入片的个数:"))

print("需要移动",f(x),"次")

请输入片的个数:64

需要移动 18446744073709551615 次

 代码

def hanoi(n, x, y, z):if n == 1:print(x, '-->', z)  # 如果只有一层,直接从X移动到Zelse:hanoi(n-1, x, z, y)  # 将前n-1个盘子从X移动到Yprint(x, '-->', z)  # 将最底下的第64个盘子从X移动到Z上hanoi(n-1, y, x, z)  # 将Y上的63个盘子移动到Z上n = eval(input('请输入汉诺塔的层数:'))
hanoi(n, 'X', 'Y', 'Z')

运行结果

7.某种传染病第一天只有一个患者,前5天为潜伏期,不发作也不会传染人,第6天开始发作,从发作到治愈需要5天时间,期间每天传染3个人,求第N天共有多少患者。

题目分析

患者数=潜伏期人数+发作期人数

 这个图这么好,当然是我借的啦~~~

经典算法——传染病问题(Java版)_攻城狮H的博客-CSDN博客_感染算法

代码

def num(n):if n == 0:return 0if n <= 5:return 1elif 5 < n <= 10:return num(n-5)*3+num(n-1)elif n == 11:return (num(n-5)-num(n-10))*3+num(n-1)-num(n-10)elif n > 11:return (num(n-5)-num(n-10))*3+num(n-1)N = eval(input())
print(num(N))

运行结果

卡了一天,今天修改了一下条件就运行成功了。

 8.佩尔数列

题目分析

佩尔数列是一个整数数列。它的第一项为0,第二项为1,第3项是第2项的2倍再加上第1项,第4项是第3项的2倍再加上第2项,……。最初几个佩尔数是:0,1,2,5,12,29,70,169,408,985,2378……。
请编写程序从键盘输入整数n,求出佩尔数列第n项。

代码实现

def get_pell(n):if n == 1:return 0elif n == 2:return 1elif n > 2:return get_pell(n - 1) * 2 + get_pell(n - 2)n = eval(input("输入整数n;"))
num = get_pell(n)
print("佩尔数列的第{}项为{}".format(n, num))

运行结果 


 

大家有什么好的题目和想法可以留言~~~


http://chatgpt.dhexx.cn/article/xJNhJe3x.shtml

相关文章

python 递归函数详解

在 python中&#xff0c;有一种非常神奇的函数&#xff1a;递归函数&#xff0c;它可以让你的程序实现自顶向下的递归调用&#xff0c;从而实现程序的无限循环。这是一种非常神奇的语言&#xff0c;可以让你使用一种语言实现另一种语言。它还有一个很酷的名字&#xff1a; shel…

python函数递归求和详解_Python递归函数详细分析

什么是递归? 递归,就是在函数运行中自己调用自己 代码示例: def recursion(n): # 定义递归函数 print(n) # 打印n recursion(n1) # 在函数的运行种调用递归 recursion(1) # 调用函数 这个函数在不断的自己调用自己,每次调用n1,看下运行结果: 1 2 ..... 998Tracebac…

Python递归思想与代码实现

1&#xff0c; 递归思想 递归算法:递归(Recursion)&#xff0c;在数学与计算机科学中&#xff0c;是指在函数的定义中使用函数自身的方法。 这是官方的解释&#xff0c;翻译成人话就是&#xff1a; 函数内部自己调用自己函数必须有出口 函数自己调用自己很好理解&#xff0c…

python函数递归调用时对深度没有限制_python递归深度

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 今天在写爬虫的时候,发现了一个事情,使用str方法强制转换一个beautifulsoup对象成字符串的时候报错了,提示是“maximum recursion depth exceeded while cal…

python递归函数详解

python递归函数是指一个函数从一个状态开始&#xff0c;然后返回另一个状态。递归函数是在实现过程中遇到的最基本的一类函数。比如&#xff0c; int i0; int j0; int c1;等等都是一类递归函数&#xff0c;但是我们知道&#xff0c;它们在实现过程中需要执行多次&#xff0c;并…

Python 递归的优化

文章目录 前言一、递归实现斐波那契二、优化后的斐波那契总结 前言 递归&#xff0c;很常见的一种算法&#xff0c;在初学的时候我们都会用递归来解决斐波那契数列&#xff0c;但递归本身有非常大的缺陷&#xff0c;就是时间和空间占用都非常大&#xff0c;在进阶学习后&#…

Python 递归实现乘法

Python定义函数:使用递归求乘积&#xff08;x*y&#xff09; 1 当作x个y相加或者y个x相加 2 当其中一数&#xff08;以x为例&#xff09;不为1时&#xff0c;返回y加上该函数&#xff0c;同时每次x-1&#xff0c;直至x1为止&#xff0c;此过程实现了x个y相加 具体代码如下:

python递归遍历查询文件 文件夹

文章目录 &#x1f357;先看运行效果&#x1f354; 具体思路&#x1f35f; 一、主要使用的模块以及方法&#x1f32d; 二、主要思路以及代码&#x1f37f; 1、开始位置&#x1f9c2; 2、关键位置&#x1f953; 3、结果输出 &#x1f9c7; 完整源码&#x1f95e; 结尾&#x1f9…

轻松搞懂Python递归函数的原理与应用

递归: 在函数的定义中&#xff0c;函数内部的语句调用函数本身。 1、递归的原理 学习任何计算机语言过程中&#xff0c;“递归”一直是所有人心中的疼。不知你是否听过这个冷笑话&#xff1a;“一个面包&#xff0c;走着走着饿了&#xff0c;于是就把自己吃了”。 常理推断&…

python递归如何理解

最近在做递归一些相关的东西&#xff0c;发现递归入门很容易&#xff0c;但要具体了解其实现过程&#xff0c;比较难以理解&#xff0c;在这里将自己这几天的摸索记录一下&#xff0c;写知乎的主要目的是为了给自己做笔记&#xff0c;在做笔记的同时&#xff0c;帮助后来人少走…

【Python函数的递归】

递归的定义 函数作为一种代码封装&#xff0c;可以被其他程序调用&#xff0c;当然&#xff0c;也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。就像一个人站在装满镜子的房间中&#xff0c;看到的影像就是递归的结果。递归在数学和计算机应用上非常强大…

H3C 交换机S5130S软件版本升级

1.通过官网下载软件包 升级的包名为 S5130S_HI-CMW710-R6330.ipe 2. 查看FLASH空间是否足够 <H3C>dir /all Free的空间需要是软件包的2倍大小&#xff0c;例如S5130S_HI-CMW710-R6330.ipe软件包大小为54MB&#xff0c;那么交换机Free的空间需要108M。 空间如果…

H3C 交换机S6520X软件版本升级

1.通过官网下载软件包 升级的包名为 S6520X-CMW710-R6312P02.zip 压缩包里有很多特性包&#xff0c;我们目前就使用 S6520X-CMW710-R6312P02.ipe 2. 查看FLASH空间是否足够 <H3C>dir /all Free的空间需要是软件包的2倍大小&#xff0c;例如S6520X-CMW710-R6312P0…

H3c服务器升级硬盘固件,H3C交换机升级固件版本

二、进入产品支持与服务&#xff0c;找到适配的交换机固件进行下载 三、下载时要求提供用户名密码 用户名&#xff1a;yx800 密码&#xff1a;01230123 四、H3C官方升级说明案例 1.1 实验拓扑(假设SW1上 VLAN 1 的虚地址为10.10.10.1&#xff0c;PC配置同网段地址10.10.10.…

博途V16 更改PLC的型号和固件版本

在线访问&#xff0c;查看硬件PLC的固件版本。 右键&#xff0c;选择更改设备。 选择PLC型号和版本号。

TIA博途_如何更新程序中的指令版本和CPU固件版本?

TIA博途_如何更新程序中的指令版本和CPU固件版本? TIA博途STEP7从V14SP1版本增加新功能:“更新程序”,可以将当前CPU中的程序版本更新至能够使用的最高版本,对于通讯、运动控制等版本经常升级的程序非常适用, 以下进行举例说明: TIA博途STEP7 V13 SP1中组态S7-1200 V4.1版…

TIA PORTAL西门子PLC的CPU固件版本兼容问题

TIA PORTAL西门子PLC的CPU固件版本兼容问题 以S7-1200为例&#xff0c;现在新出的PLC的固件都是V4.4的版本了&#xff0c;而原来的软件如V15.0组态不到V4.4&#xff0c;只能组态到V4.2&#xff0c;在想继续使用V15.0的情况下&#xff0c;这个PLC还可以用吗&#xff1f; 答案是可…

如何在TIA博途中在线更新PLC的CPU固件版本?

如何在TIA博途中在线更新PLC的CPU固件版本? S7-1200PLC最新的V4.6.0版本的固件出来了,本次就以V4.6版本的固件为例,演示如何在博途中对PLC的固件版本进行更新。 (为防止更新过程中出现意外,强烈建议对PLC的程序进行备份!备份!备份!) 如下图所示,打开某个项目,选中PL…

西门子S7-1200如何使用TIA软件更新CPU固件版本

1、先点击上方“可访问的设备”按钮&#xff0c;扫描出当前所连PLC。 2、点击“显示”&#xff0c;在右边目录树中即可显示出所连PLC&#xff0c;点击“在线和诊断”。 3、即可显示出固件版本和上一个使用者所用博图软件版本。 4、打开所连接S7-1200的“在线和诊断”视图&…

软件版本控制流程

1.编写目的 主要针对软件版本的流程, 以确保公司资产得到保护。 2.适用范围 该流程适用于产品研发部门。 3.环境资源 在整个产品生命周期中&#xff0c;以gitlab作为公司主要代码仓库。 4.流程 流程分为版本号定义、版本发布 4.1 版本号定义 4.1.1 版本号规则 采用语义…