1. 程式人生 > >習題4-11 兔子繁衍問題 (15 分)(遞迴演算法)(陣列演算法)

習題4-11 兔子繁衍問題 (15 分)(遞迴演算法)(陣列演算法)

一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數才可以達到N對?

輸入格式:
輸入在一行中給出一個不超過10000的正整數N。

輸出格式:
在一行中輸出兔子總數達到N對最少需要的月數。

輸入樣例:
30
輸出樣例:
9
兔子兩個月後就可以生一對(第一對兔子在第三個月時已經生了一對了)

#include<stdio.h>
int main()
{
	int i,a[100],n;
	a[1]=1,a[2]=1;
	scanf("%d",&n);
	i=
2; while(a[i]<n) { a[i+1]=a[i]+a[i-1];//也可以使用多個變數代替因為每個資料都只使用一次,無需儲存。 i++; } if(i!=2) printf("%d",i); else printf("1"); return 0; }

遞迴演算法

#include<stdio.h>
int d(int m);
int main()
{
	int n,m=25;
	scanf("%d",&n);
	while(1)
	{
	if(d(m)<n)//得出最接近n但小於n的月數
	{
	printf("%d",m+
1);//因為m是最接近n的月數,所以m+1就是正確答案。 break; } else d(m--);} return 0; } int d( int m) { if(m==1||m==2) return 1; else { m=d(m-1)+d(m-2); return m;} }

遞迴:從最終結果開始計算,構思計算到開頭;
迴圈:從開頭計算到最終結果;
能用遞迴計算的問題也可以用迴圈計算(利用陣列或多個變數)。