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

一、问题描述

有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)))

五、运行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值