解题思路:母牛递归前面四年就是一头母牛每年生一头小牛,从第五年开始,就变成了前一年的母牛数加上新出生的小牛,很显然,前一年的母牛数就是f(n-1),而新生的小牛数是f(n-3),因为只有3牛以前的母牛会生小牛,这个纯靠个人理解,对于新手来说,难的是每行输入一个数,以0为程序的终止,最后一起输出的问题。

这个问题引用数组比较好解决,首先要用数组存放你输入的每一个数,最后输入0的时候跳出输入的循环,转到输出这个数组里的每一个数带入母牛递归问题的解,所以需要两个循环,一个循环用来存放输入的数,另一个循环用来输出数组里面存放的值代入母牛递归中的解,话不多说,看代码。


注意事项:对于新手来说要格外注意数组索引要改变的问题。

参考代码:

#include

int fun1(int a)         //母牛递归问题求解的函数

{

int sum=0;

if (a<=4)

return a;

if (a>=5)

return fun1(a-1)+fun1(a-3); 

}                  

//下面到输入输出格式问题了

int main()

{

int arr[55];             //因为题目要求,先定义一个长度55的数组,可以存放55个数

int i=0;                   //这个i与b都是用来当索引的

int b=0;                //索引

while (scanf ("%d",&arr[i]),arr[i]!=0)                  //输入的不为0的数都存入数组中

{

i++;                    //i自加,代表存入数组的下一个地标

while (b<i)      //输入0跳出上面循环后,进入输出将数组值代入fun1中的值,也就是母牛递归问题的解

{

printf ("%d\n",fun1(arr[b]));          //先前已经定义了b=0,在此就是将数组中的第一个数字代入fun1

b++;                                                           //而后b自加,意味着将下一个数组中的值代入fun1

}

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论