UserTime


私信TA

用户名:usertime123

访问量:3589

签 名:

等  级
排  名 3026
经  验 2059
参赛次数 2
文章发表 7
年  龄 5
在职情况 学生
学  校
专  业

  自我简介:

解题思路:


首先在表格上画一下,方便理解本题


年份\年龄1岁2岁3岁成年总数
第一年00011
第二年10012
第三年11013
第四年11114
第五年21126


那么接下来稍微找一下规律就会发现其实非常简单,

根据表格可以很明显的找到一年就是会增加一个,

那么我们利用函数的参数定义4个参数用来分别存储4个年龄,

但是有个 注意事项 是本题只要到了4岁就会瞬间生下一头牛,

所以在年份5这里1岁变成了2头,而不是1头。


代码实现上无非就是前一年1岁的都变成2岁了,2岁的变成3岁......

所以我们只需要把1岁的数量变量放到2岁即可


注意事项:

本题只要到了4岁就会瞬间生下一头牛,所以刚成年的3岁,要刚成年的曾经的3岁数+成年总数 才是1岁的数量

所以需要d += c


下面是参考代码:



def f(num, a=0, b=0, c=0, d=1):
    if num <= 1:
        print(a + b + c + d)
        return
    d += c
    f(num - 1, d, a, b, d)


while True:
    year = int(input())
    if year == 0:
        break
    f(year)


代码讲解:

首先定义一个名为 f的函数,并创建5个参数用于存储,

分别是存储年份(num),和4个年龄阶段(a, b, c, d)的参数,


首先判断结束条件,

根据题目(在第n年的时候,共有多少头母牛?)设置为年份,


然后由于之前提到的本题只要到4岁就会生下一头牛,

所以d+=c用于在接下来递归传参使用

num-1是已经历1年(递归一次),将由于成年母牛会生小牛,

所以a的位置放入d,然后将a放入b(因为已经过去一年),b也是同理



while True是无限循环,无限接受输入,

如果判断输入为0,那么结束While循环,不然进入递归


 

0.0分

6 人评分

  评论区

  • «
  • »