【Python递归练习】

2023-10-27

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

题目分析:

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

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

代码

def fish(n): #第几次卖鱼时共有多少条鱼
    if n == 5:
        return 11
    else:
        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 6
    else:
        return (num(i+1)-8+i)*2


i = eval(input())
print(num(i))

运行结果


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

代码

def peach(n):
    if n > 9:
        return 0
    elif n == 9:
        return 2  # 第九天还有两个桃子,都被吃了
    else:
        return (peach(n+1)+1)*2


print("猴子们摘来了:{}个桃子".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 0
    elif n == 6:
        return 3
    else:
        return (num(n+1)+2)*2


print("全书共:{}页".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 1
    else:
        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移动到Z
    else:
        hanoi(n-1, x, z, y)  # 将前n-1个盘子从X移动到Y
        print(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 0
    if n <= 5:
        return 1
    elif 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 0
    elif n == 2:
        return 1
    elif n > 2:
        return get_pell(n - 1) * 2 + get_pell(n - 2)


n = eval(input("输入整数n;"))
num = get_pell(n)
print("佩尔数列的第{}项为{}".format(n, num))

运行结果 


 

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python递归练习】 的相关文章

  • Python 中的字节数组

    如何在 Python 中表示字节数组 如 Java 中的 byte 我需要用 gevent 通过网络发送它 byte key 0x13 0x00 0x00 0x00 0x08 0x00 在Python 3中 我们使用bytes对象 也称为s
  • Flask+Nginx+uWSGI:导入错误:没有名为站点的模块

    我安装为http www reinbach com uwsgi nginx flask virtualenv mac os x html http www reinbach com uwsgi nginx flask virtualenv
  • 切片稀疏(scipy)矩阵

    我将不胜感激任何帮助 以理解从 scipy sparse 包中切片 lil matrix A 时的以下行为 实际上 我想根据行和列的任意索引列表提取子矩阵 当我使用这两行代码时 x1 A list 1 x2 x1 list 2 一切都很好
  • 即使页面未完全加载,我们也可以使用 Selenium 获取页面源吗(TimeoutException: Message: timeout)?

    即使遇到 TimeoutException Message timeout 也能获取页面源码吗 当我调用 driver page source 时 有时无法加载整页 但我只需要它的部分信息 尚未确定 所以我只想在任何情况下保存页面 是否可以
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 查找模块中显式定义的函数 (python)

    好的 我知道您可以使用 dir 方法列出模块中的所有内容 但是有什么方法可以仅查看该模块中定义的函数吗 例如 假设我的模块如下所示 from datetime import date datetime def test return Thi
  • 当我在 Pandas 中使用 df.corr 时,我的一些列丢失了

    这是我的代码 import numpy as np import pandas as pd import seaborn as sns import matplotlib pyplot as plt data pd read csv dea
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • 与 while 循环一样,如何跳过 for 循环中的步骤?

    我尝试像 while 循环一样跳过 for 循环中的几个步骤 在 while 循环中 步骤根据特定条件进行调整 如下面的代码所示 i 0 while i lt 10 if i 3 i 5 else print i i i 1 result
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可

随机推荐

  • Python_OpenCV_TensorFlow微型仿真深度学习 Raspberry Pi 自动驾驶车

    视觉OpenCV 配置 Raspberry Pi 配置 TensorFlow OpenCV自主车道导航 import cv2 frame cv2 imread home pi DeepCar driver data road1 240x32
  • linux内核I2C子系统学习(二)

    下面具体分析如何写第一部分 主控芯片的i2c驱动分为2个步骤 写总线驱动 选了个主控芯片 比如 S3C8900 自己瞎编的芯片 在driver i2c busses i2c s3c2410 c中没有找到这个芯片的I2C支持 总线驱动支持 倒
  • Cesium 设置视角的两种方式

    作为开源WebGIS三维可视化领域的翘楚 Cesium中可以可以添加不同的Entity实体数据 也可以添加各种各样的模型数据 那么当我们添加好数据之后 如何设置视角以便于观察呢 这里介绍两种不同的方式设置视角 一种是设置添加数据的orien
  • java开发常见错误_java开发常见错误汇集

    1 一直出不来结果 原来是把el表达式写错了 后面多写了一个 谨记 2 浏览器报错 如 POST http localhost 8081 AntFooder shopcar addToShopCar 400 jquery 1 8 3 min
  • 春日

    春河日语风中雪 山花烂漫无旧人 朝看青川山岳早 屋棚夜下早还家 粉黛陶冠春暖意 笑含茹妆玉着衫 望风巍然而却下 不知天外九重天 潇潇暮雨冬来去 莺鸟桃花又一春 文人墨客山茶草 酸草含嚼苦味深 羽墨掸空不见色 横刀断水水无痕
  • Thinkpad VMware 安装虚拟机出现此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态(问题解决方法)

    今天在使用VMware打算在机器中安装新的虚拟机时 出现 此主机支持 Intel VT x 但 Intel VT x 处于禁用状态 错误如下 提示信息 此主机支持 Intel VT x 但 Intel VT x 处于禁用状态 如果已在 BI
  • mysql中innodb和myisam对比及索引原理区别

    InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型 这两个表类型各有优劣 5 7之后就不一样了 1 事务和外键 InnoDB具有事务 支持4个事务隔离级别 回滚 崩溃修复能力和多版本并发的事务安全 包括ACID 如果应用
  • 【Linux】磁盘或内存 占用比较高要怎么排

    当 Linux 磁盘空间满了时 请注意 在进行任何删除操作之前 请确保你知道哪些文件可以安全删除 并备份重要文件 以免意外丢失数据 当 Linux 磁盘空间满了时 可以按照以下步骤进行排查 检查磁盘使用情况 运行 df h 命令来查看磁盘使
  • 【愉快的使用go.mod应用自己开发的package包(库)】

    GO引用自己写的模块1 仅使用 根 路径的go mod 在go中开启了GO111MODULE on 就可以使用go语言自带的mod来管理自己开发的项目的依赖 从而可以摆脱传统的必须把依赖的模块放在GOROOT或者GOPATH下的src pk
  • js数据结构之队列及其应用

    对列 刚好和栈相反 它是先进先出的 只允许在队列的一头添加元素 另一头删除元素 class queue constructor this arr 插入元素 enqueue ele this arr push ele 删除元素 dequeue
  • GLM:ChatGLM的基座模型

    介绍 ChatGLM 6B https github com THUDM ChatGLM 6B 主要是能够让我们基于单卡自己部署 ChatGLM的基座是GLM General Language Model Pretraining with
  • 手把手教你solidworks中的齿轮配合

    手把手教你solidworks中的齿轮配合 1 建立装配图 在装配体中导入两个齿轮 2 把齿轮1固定改为浮动 3 如下图所示选中隐藏 显示主要基准面 4 选中上视基准面和右视基准面 点击参考面之下的基准轴如下图所示 打上勾 建立基准轴后 点
  • SQL注入--报错和盲注

    目录 报错注入 floor函数报错注入 extractvalue 函数报错注入 updatexml 函数报错注入 盲注 布尔盲注 时间盲注 报错注入 文章内容篇幅较长 请认真研读 回顾之前的文章 sql注入基础 了解到sql注入的分类有 基
  • EXCEL-VBA:弹出对话框,打开文件(指定扩展名)两种方法

    方法一 Dim FileName As String FileName Application GetOpenFilename Excel 文件 xls xlsx 方法二 With Application FileDialog msoFil
  • Shell脚本入门 07:进程与信号

    文章目录 目的 进程相关 子进程 子Shell 进程替换 信号相关 发送信号 捕获信号 总结 目的 进程与信号中Linux中比较重要的内容 Shell脚本编写调试时也会涉及一些进程与信号相关的内容 这篇文章将对相关内容做个简单的记录 进程相
  • 多线程中递归锁的实现

    多线程中递归锁的实现 在上一篇文章中 我已经阐述了多线程中简单锁的实现 可在结束的时候 我就提了那么一个问题 那就是如果在一个链表中进行插入时 要进行查询的操作 如果只是简单的锁 是没法实现的 所以 递归锁 就浮现于世了 可能有些人看到递归
  • html动态加载js方法,原生JS实现动态加载js文件并在加载成功后执行回调函数的方法...

    本文实例讲述了原生JS实现动态加载js文件并在加载成功后执行回调函数的方法 分享给大家供大家参考 具体如下 有的时候需要动态加载一个javascript文件 并且在加载成功后执行回调函数 例如文件中保存了json数据之类的 要实现这样的功能
  • rclone 命令大全

    rclone 命令大全 使用google翻译 这描述了每个 rclone 命令 分为两组 非后端和后端标志 可用的全局标志 非后端标志 这些标志可用于每个命令 ask password 允许提示输入加密配置的密码 默认为 true auto
  • 肘部法和轮廓系数法确定K-means中的k值

    目录 1 K Means 算法 2 肘部法 3 轮廓系数法 1 K Means 算法 k means算法 详解k means算法原理 是机器学习中常用的聚类算法 原理简单实现容易 内存占用量也比较小 但使用这个方法时 需要事先指定将要聚合成
  • 【Python递归练习】

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