c语言编程一对新出生的兔子,C语言兔子生兔子的问题(3中解法)
有一對兔子,從出生后第 3 個(gè)月起每個(gè)月都生一對兔子,小兔子長到第三個(gè)月后每個(gè)月又生一對兔子,假如兔子都不死,問每個(gè)月的兔子總數(shù)為多少?
兔子的規(guī)律為數(shù)列:1, 1, 2, 3, 5, 8, 13, 21 ....
下面使用了迭代、遞歸和數(shù)組三種解法。
【代碼一】使用迭代:
#include
int main()
{
long f1=1, f2=1; // 兔子的數(shù)量
int i; // 循環(huán)次數(shù)
int n; // 要計(jì)算的月份
printf("輸入要計(jì)算的月數(shù):");
scanf("%d", &n);
// 計(jì)算出循環(huán)次數(shù)
if(n%2==1){
n = (n+1)/2;
}else{
n = n/2;
}
for(i=1;i<=n;i++){
printf("第%d個(gè)月有%d只\n", i*2-1, f1);
printf("第%d個(gè)月有%d只\n", i*2, f2);
f1=f1+f2; /*前兩個(gè)月加起來賦值給第三個(gè)月*/
f2=f1+f2; /*前兩個(gè)月加起來賦值給第三個(gè)月*/
}
return 0;
}
運(yùn)行結(jié)果:
運(yùn)行結(jié)果:
輸入要計(jì)算的月數(shù):10
第1個(gè)月有1只
第2個(gè)月有1只
第3個(gè)月有2只
第4個(gè)月有3只
第5個(gè)月有5只
第6個(gè)月有8只
第7個(gè)月有13只
第8個(gè)月有21只
第9個(gè)月有34只
第10個(gè)月有55只
【方法二】使用遞歸:
#include
int Feibonacci(int n){
if(n==1||n==2)
return 1;
else
return Feibonacci(n-1)+Feibonacci(n-2);
}
int main(){
int n; // 要計(jì)算的月份
printf("輸入要計(jì)算的月數(shù):");
scanf("%d", &n);
printf("%d個(gè)月的兔子總數(shù)為%d\n", n, Feibonacci(n));
return 0;
}
運(yùn)行結(jié)果:
輸入要計(jì)算的月數(shù):10
10個(gè)月的兔子總數(shù)為55
遞歸看上去非常符合邏輯,但是這種遞歸效率是非常慢的,不信你計(jì)算20, 30, 40 個(gè)月的兔子數(shù)試試,明顯比另外兩種方法慢多了,具體分析請看:C語言用遞歸求斐波那契數(shù),讓你發(fā)現(xiàn)遞歸的缺陷和效率瓶頸
【代碼三】使用數(shù)組:
#include
void main()
{
int a[100] ,i,n;
printf("請輸入月數(shù):");
scanf("%d",&n);
a[0]=a[1]=1;
for(i=2;i
a[i]=a[i-1]+a[i-2];
printf("第%d個(gè)月的兔子為:%d\n", n, a[n-1]);
}
運(yùn)行結(jié)果:
請輸入月數(shù):10
第10個(gè)月的兔子為:55
總結(jié)
以上是生活随笔為你收集整理的c语言编程一对新出生的兔子,C语言兔子生兔子的问题(3中解法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团春招笔试题
- 下一篇: 格式化代码_格式化代码是什么意思