设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第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’ 函数起着全局变量的作用
尾注
个人能力有限,对于递去和归来中解决问题一脸懵逼,所以喜欢设置外部变量来解决问题,关于代码有任何问题或者改进,欢迎评论交流。