怎么做網(wǎng)站訪問統(tǒng)計手機創(chuàng)建網(wǎng)站免費注冊
題目:
????????古典問題,有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數(shù)為多少?
程序分析:
????????兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....,即斐波那契數(shù)列。斐波那契數(shù)列(Fibonacci sequence),又稱黃金分割數(shù)列、因數(shù)學(xué)家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”,指的是這樣一個數(shù)列:1、1、2、3、5、8、13、21、34、……在數(shù)學(xué)上,斐波納契數(shù)列以如下被以遞歸的方法定義:
????????F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
算法思路:
????????這是一個經(jīng)典的斐波那契數(shù)列問題,要求計算兔子的總數(shù)。
????????1. 首先,通過Scanner類獲取用戶輸入的整數(shù)n,表示要計算前n個月的兔子總數(shù)。
????????2. 然后,使用for循環(huán)遍歷從1到n的每一個月份。
????????3. 在每個月份中,調(diào)用Fib函數(shù)來計算當前月份的兔子總數(shù)。
????????4. Fib函數(shù)采用遞歸的方式實現(xiàn),當月份小于等于2時,返回1;否則,返回前兩個月的兔子總數(shù)之和。
????????5. 最后,輸出每個月的兔子總數(shù)。
注意:代碼中還提供了一個使用數(shù)組實現(xiàn)的Fib函數(shù),但被注釋掉了。這個函數(shù)的思路是創(chuàng)建一個長度為102400的數(shù)組,用于存儲斐波那契數(shù)列的前102400項。然后,通過循環(huán)計算第n項的值,并返回結(jié)果。這種方法的時間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。
源代碼:
package Question2;import java.util.Scanner;public class Tutu {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.print("請輸入:");int n=scanner.nextInt();for(int i=1;i<=n;i++){System.out.println("第"+i+"個月兔子總數(shù)為:"+Fib(i)+"(對)");}}//遞歸public static int Fib(int n){if(n<=2){return 1;}else{return Fib(n-1)+Fib(n-2);}}//數(shù)組
// public static int Fib(int n)
// {
// int[] arry=new int[102400];
// arry[1]=1;
// arry[2]=1;
// if(n<2)
// {
// return arry[1];
// }
// else
// {
// for (int i = 3; i <= n; i++) {
// arry[i] = arry[i - 1] + arry[i - 2];
// }
// return arry[n];
// }
// }}