首先在表格上画一下,方便理解本题
年份\年龄 | 1岁 | 2岁 | 3岁 | 成年 | 总数 |
第一年 | 0 | 0 | 0 | 1 | 1 |
第二年 | 1 | 0 | 0 | 1 | 2 |
第三年 | 1 | 1 | 0 | 1 | 3 |
第四年 | 1 | 1 | 1 | 1 | 4 |
第五年 | 2 | 1 | 1 | 2 | 6 |
那么接下来稍微找一下规律就会发现其实非常简单,
根据表格可以很明显的找到一年就是会增加一个,
那么我们利用函数的参数定义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 人评分
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:933 |
母牛的故事 (C语言代码)浏览:1450 |
C语言训练-亲密数 (C语言代码)浏览:697 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1483 |
小九九 (C语言描述,不看要求真坑爹)浏览:1006 |
C二级辅导-计负均正 (C语言代码)浏览:523 |
排序算法(选择,插入,冒泡)浏览:876 |
盐水的故事 (C语言代码)浏览:1601 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:646 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:444 |