(递归思路分享)设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?

设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?


我的思路

  书写名为 ‘birth’ 的函数来模拟一头母牛的运作过程,母牛的每次生育,就相当于又产生了一个 ‘birth’ 函数,可以设置全局变量或者外部变量传入地址的方法来统计母牛的总数量。

我的代码

#include <stdio.h>

void birth(int time, int deadline, int *sum)
{
    for (int i = time; i <= deadline; i++)
    {
        if ((i - time) >= 3)
        {
            birth(i, deadline, sum);
            (*sum)++;
        }
    }
}

int main()
{
    int n;
    scanf("%d", &n);
    int sum = 1;
    birth(1, n, &sum);
    printf("%d", sum);
}

代码详解

void birth(int time, int deadline, int *sum)
{
    for (int i = time; i <= deadline; i++)
    {
        if ((i - time) >= 3)//从出生第四年起及以后,开始每年生育一头小牛
        {
            birth(i, deadline, sum);//新出生的小牛的出生日期为'i'
            (*sum)++;//牛的总数加一
        }
    }
}

变量 ‘time’ : 即这头母牛的出生日期
变量 ‘deadline’ : 即函数的截止日期,若要求取第 ‘N’ 年的母牛数量,则变量 ‘deadline’ 为 ‘N’
变量 ‘*sum’ : 从 ‘birth’ 函数外部传入,用于统计母牛的总数,相对 ‘birth’ 函数起着全局变量的作用


尾注

  个人能力有限,对于递去和归来中解决问题一脸懵逼,所以喜欢设置外部变量来解决问题,关于代码有任何问题或者改进,欢迎评论交流。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值