python实现递归算法解决年龄问题

news2024/10/6 8:34:52

一、问题描述

有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁。问第4个人多少岁,他说比第3个人大2岁。问第3人多少岁,他说比第2个人大2岁。问第2个人多少岁,他说比第1个人大2岁。最后问第1个人多少岁,他说他是10岁。编写python程序,求出当输入某个人时其对应的年龄。

二、问题分析

1、该问题是一个递归问题

2、要求出第5个人的年龄,则必须先知道第4个人的年龄,显然第4个人的年龄也是未知的, 但可以由第3个人的年龄推算出来。而想知道第3个人的年龄,又必须先知道第2个人的年龄,而第2个人的年龄取决于第1个人的年龄。 又已知每个人的年龄都比其前一个人的年龄大2,因此根据题意,可得到如下几个表达式:

age(5)=age(4)+2

age(4)=age(3)+2

age(3)=age(2)+2

age(2)=age(1)+2

age(1)=10

用数学公式表达为:

age(n)=age(n-1)+2,n>1

age(n)=10,n=1

三、算法设计

(1)函数递归调用的基础知识:

a.函数递归调用的定义:如果在调用一个函数的过程中又出现直接或间接地调用该函数本身,则称为函数的递归调用

b.程序中递归调用的方式:

(I)直接递归调用,即函数直接调用本身。在调用函数f()的过程中,又要调用f()函数,这就是函数的直接递归调用

例如:

def f(x):
    ......
    y = f(n)
    # 调用自身
    ......
    return y

(II)间接递归调用,即函数间接调用本身。定义了两个函数f1()和f2()。在调用f1()函数的过程中,f1()又调用了函数f2(), 而在调用函数f2()的过程中,又调用了f1()

例如: 

def f1(x):
......
    z = f2(y)
    ......
    return 2 * z
def f2(t):
    ......
    c = f1(a)
    ......
    return 3+c

c.在递归调用中不能出现无终止的调用,只能是有限次的递归调用,即必须有递归结束条件。因此,在代码中一定要有控制递归调用终止的语句

(2)将age(n)=10,n=1转成一个函数,在main()函数中通过调用age(n)函数就可以获知第n个人的年龄 (3)每次调用age()函数时并不会马上获得年龄值,而是不断地进行递归调用,直到调用到age(1)时才有确定的年龄值,然后再从age(1)一步步地递推回去

四、完整程序

def age(n):
    if n == 1:
        x = 10
    else:
        x = age(n - 1) + 2
    return x


if __name__ == "__main__":
    # n表示第几个人
    n = int(input("请输入n的值: "))
    # 调用age()函数,计算第n个人的年龄
    print("第 %d 个人的年龄为: %d" % (n, age(n)))

五、运行结果

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

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

相关文章

ALLEGRO之SHAPE

ALLEGRO中的SHAPE菜单对应AD中的Polygon Pour,即铺铜操作。 1. Polygon:铺铜,在Options选择对应子层(例如Etch-Top),选择Dynamic copper(动态铺铜,会自动避让过孔,Static…

MIT 6.S081 教材第五章内容 -- 中断与设备驱动--上

MIT 6.S081 教材第五章内容 -- 中断与设备驱动--上 引言真实操作系统内存使用情况(上一节回顾)中断和设备驱动Interrupt硬件部分设备驱动概述在XV6中设置中断UART驱动的top部分UART驱动的bottom部分Interrupt相关的并发UART读取键盘输入Interrupt的演进小结代码:控制…

VanillaNet 原理与代码解读

paper:VanillaNet: the Power of Minimalism in Deep Learning official implementation: GitHub - huawei-noah/VanillaNet 存在的问题 虽然复杂网络的性能很好,但它们日益增加的复杂性给部署带来了挑战。例如,ResNets中的sh…

浏览器工作原理

浏览器(也称为网络浏览器或互联网浏览器)是安装在我们设备上的软件应用程序,使我们能够访问万维网。在阅读这篇文字时,你实际上正在使用一个浏览器。 有许多浏览器正在被使用,截至2022年,使用最多的是&…

为了找到好工作,花2个月时间整理了3.5W字的自动化测试面试题(答案+学习路线)!

从5月初开始找工作到现在,先后面试了阿里巴巴、字节跳动、网易、快手的测试开发岗。 大公司对于测试开发的要求相比来说高很多,要求掌握的知识点的广度和深度层次也比较高,遂整理了这两个月的面试题目文档供大家参考,同时也是为了…

基于java+swing+mysql商城购物系统

基于javaswingmysql商城购物系统 一、系统介绍二、功能展示1.项目骨架2.主界面3.用户登陆4.添加商品类别5、添加商品6、商品管理 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java SE项目 项目名称:商城购物系统 用户类型:双…

【C++学习】线程库 | IO流 | 空间配置器

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! 一、线程库 在C11之前,涉及到多线程问题,都是和平台相关的,比如w…

【Python爬虫开发基础⑥】计算机网络基础(Web和HTTP)

专栏:python网络爬虫从基础到实战 欢迎订阅!近期还会不断更新~ 另外:如果想要看更多的计算机网络知识,可以关注我的专栏:计算机网络 往期推荐: 【Python爬虫开发基础①】Python基础(变量及其命名…

【数据结构】特殊矩阵的压缩存储

🎇【数据结构】特殊矩阵的压缩存储🎇 🌈 自在飞花轻似梦,无边丝雨细如愁 🌈 🌟 正式开始学习数据结构啦~此专栏作为学习过程中的记录🌟 文章目录 🎇【数据结构】特殊矩阵的压缩存储&#x1f38…

C语言学习(二十六)---指针练习题(二)

在上节的内容中,我们进一步学习了有关指针的内容,并做了一些关于指针的题目,今天我们将继续练习一些指针的题目,以便大家更好的理解和掌握指针的知识,好了,话不多说,开整!&#xff0…

【c++11】 左值引用和右值引用

c11特性 右值引用左值引用和右值引用左值引用右值引用比较 右值引用的应用左值引用的短处右值引用解决问题移动构造 STL的改动move()函数结语 右值引用 c从出现就有着引用的语法,但是在c11后又新增了右值引用的新特性,以往所学的引用成了左值引用。非左…

代码随想录算法训练营第四十二天| 背包问题

标准背包问题 有n件物品和一个最多能背重量为w 的背包。 第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 举一个例子: 背包最大重量为4。 物品为: 重量价…

5.2.3目录与文件之权限意义

现在我们知道了Linux系统内文件的三种身份(拥有者、群组与其他人),知道每种身份都有三种权限(rwx), 已知道能够使用chown, chgrp, chmod去修改这些权限与属性,当然,利用ls -l去观察文…

《C++高级编程》读书笔记(十:揭秘继承技术)

1、参考引用 C高级编程(第4版,C17标准)马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门,笔记链接如下 21天学通C读书笔记(文章链接汇总) 1. 使用继承构建类 1.1 扩展类 当使用 C 编写类定义时&#xf…

WMS中Choreographer 配合 VSYNC 中断信号

WMS中Choreographer 配合 VSYNC 中断信号 1、了解SurfaceFlinger中VSYNC信号刷新2、Choreographer 舞蹈编导2.1 Choreographer初始化2.2 FrameHandler中处理任务2.3 FrameDisplayEventReceiver初始化3.4 简易流程图 3、ViewRootImpl中scheduleTraversals3.1 postCallback 通过n…

java——IO与NIO

文章目录 1. 传统IO模型字节流字符流 2. NIO模型 Java中的IO(输入输出)是用于在程序中读取和写入数据的一种机制。Java提供了两种不同的IO模型:传统的IO模型和NIO(New IO)模型。 1. 传统IO模型 在传统的IO模型中&…

WPF本地化/国际化,多语言切换

之前写过winformwinform使用本地化,中英文切换_winform 中英文切换_故里2130的博客-CSDN博客 基本的技术差不多,但是后来又发现了一个ResXManager工具,可以更好方便快捷的使用。 首先下载,网络不好的话,去官网下载&a…

01背包简介

01背包问题(0/1 Knapsack problem)是一个经典的动态规划问题,它描述了在给定容量限制的情况下,如何选择一组物品放入背包,以使得物品的总价值最大化。 问题描述: 假设有一个背包,其容量为C。现…

VulnHub项目:Fawkes

1、靶机地址 HarryPotter: Fawkes ~ VulnHub 该篇为哈利波特死亡圣器系列最终部,也是最难的一个靶机,难度真的是逐步提升!!! 2、渗透过程 确认靶机IP,kali IP,探测靶机开放端口 详细的扫描…

ICLR 23 | 工业视觉小样本异常检测最新网络:Graphcore

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://openreview.net/pdf?idxzmqxHdZAwO 论文代码:尚未开源 1.背景 随着人工智能中深度视觉检测技术的快速发展,检测工业产品表面的异常/缺陷受到了前所未有…