母牛的故事
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 92642 Accepted Submission(s): 45710
Problem Description
有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請編程實現在第n年的時候,共有多少頭母牛?
Input
輸入數據由多個測試實例組成,每個測試實例佔一行,包括一個整數n(0<n<55),n的含義如題目中描述。
n=0表示輸入數據的結束,不做處理。
Output
對於每個測試實例,輸出在第n年的時候母牛的數量。
每個輸出佔一行。
Sample Input
2
4
5
0
Sample Output
2
4
6
Author
lcy
以下是我的第一次錯誤代碼:
#include <stdio.h>
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
int x = 4, i;
if(n == 0)
break;
else if(n >= 1 && n <=4)
printf("%d\n", n);
else if(n > 4)
{
for(i = 6; x < n-1; x++)
i += (x - 1);//此處只考慮了第一隻奶牛生的奶牛長大了,而沒有考慮其他奶牛生的長大
printf("%d\n", i);
}
}
return 0;
}
進行修改,最好是使用遞歸函數,但是仍然處於瞭解階段,我不能熟練使用遞歸函數。
即使遞歸函數並沒有比迭代法好多少,在某些問題上還是程序更短,更易讀。
易讀性對於程序來說是非常重要的。
AC代碼:#include <stdio.h>
int cownum(int shu)
{
if(shu >= 1 && shu <= 4)
return shu;
else
return cownum(shu - 1) + cownum(shu - 3);
}
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
if(n == 0)
break;
printf("%d\n", cownum(n));
}
return 0;
}