返回列表 發帖

費氏數列的兩種解法

本帖最後由 tonyh 於 2023-5-6 20:16 編輯

1. 遞迴
2. 動態規劃





Java
  1. // 0 1 1 2 3 5 8 ...
  2. public class Ch01 {

  3.         Ch01()
  4.         {
  5.                 System.out.println("費氏數列第12項: "+f(12));
  6.                 System.out.println("費氏數列第23項: "+f(23));
  7.                 System.out.println("費氏數列第37項: "+f(37));
  8.                 System.out.println("費氏數列第42項: "+f(42));
  9.         }

  10.         int f(int n)
  11.         {
  12.                 if(n<2)
  13.                         return n;
  14.                 else
  15.                         return f(n-2)+f(n-1);
  16.         }

  17.         public static void main(String[] args) {
  18.                 long start=System.currentTimeMillis();
  19.                 new Ch01();
  20.                 long end=System.currentTimeMillis();
  21.                 System.out.println("花費: "+(end-start)+" 毫秒");
  22.         }

  23. }
  24. /*
  25.     f(5)
  26.     =f(3)+f(4)
  27.     =f(1)+f(2)+f(2)+f(3)
  28.     =1+f(0)+f(1)+f(0)+f(1)+f(1)+f(2)
  29.     =1+0+1+0+1+1+f(0)+f(1)
  30.     =1+1+1+1+1=5
  31. */
複製代碼
  1. // 0 1 1 2 3 5 8 ...
  2. public class Ch02 {

  3.         Ch02()
  4.         {
  5.                 long data[]=new long[90];
  6.                 data[0]=0;
  7.                 data[1]=1;
  8.                 for(int i=2; i<90; i++)
  9.                         data[i]=data[i-2]+data[i-1];
  10.                 System.out.println("費氏數列第12項: "+data[12]);
  11.                 System.out.println("費氏數列第23項: "+data[23]);
  12.                 System.out.println("費氏數列第37項: "+data[37]);
  13.                 System.out.println("費氏數列第42項: "+data[42]);
  14.                 System.out.println("費氏數列第59項: "+data[59]);
  15.                 System.out.println("費氏數列第89項: "+data[89]);
  16.         }

  17.         public static void main(String[] args) {

  18.                 long start=System.currentTimeMillis();
  19.                 new Ch02();
  20.                 long end=System.currentTimeMillis();
  21.                 System.out.println("花費: "+(end-start)+" 毫秒");
  22.         }

  23. }
複製代碼
C++
  1. #include<bits/stdc++.h>
  2. using namespace std;

  3. int f(int n)
  4. {
  5.     if(n<2)
  6.         return n;
  7.     else
  8.         return f(n-2)+f(n-1);
  9. }

  10. int main()
  11. {
  12.     cout<<"費氏數列第12項: "<<f(12)<<endl;
  13.     cout<<"費氏數列第23項: "<<f(23)<<endl;
  14.     cout<<"費氏數列第37項: "<<f(37)<<endl;
  15.     cout<<"費氏數列第42項: "<<f(42)<<endl;
  16.     cout<<"花費: "<<clock()<<" 毫秒"<<endl;
  17.     return 0;
  18. }
複製代碼
  1. #include<bits/stdc++.h>
  2. using namespace std;

  3. int main()
  4. {
  5.     long long data[90];
  6.     data[0]=0;
  7.     data[1]=1;
  8.     for(int i=2; i<90; i++)
  9.         data[i]=data[i-2]+data[i-1];
  10.     cout<<"費氏數列第12項: "<<data[12]<<endl;
  11.     cout<<"費氏數列第23項: "<<data[23]<<endl;
  12.     cout<<"費氏數列第37項: "<<data[37]<<endl;
  13.     cout<<"費氏數列第42項: "<<data[42]<<endl;
  14.     cout<<"費氏數列第59項: "<<data[59]<<endl;
  15.     cout<<"費氏數列第89項: "<<data[89]<<endl;
  16.     cout<<"花費: "<<clock()<<" 毫秒"<<endl;
  17.     return 0;
  18. }
複製代碼

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;

  3. public class P1 {
  4.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  5.         P1() throws Exception
  6.         {
  7.                  System.out.println("費氏數列第12項: "+f(12));
  8.          System.out.println("費氏數列第23項: "+f(23));
  9.          System.out.println("費氏數列第37項: "+f(37));
  10.          System.out.println("費氏數列第42項: "+f(42));
  11.         }
  12.         int f(int n)
  13.     {
  14.             if(n<2)
  15.                     return n;
  16.             else
  17.                     return f(n-2)+f(n-1);
  18.     }
  19.         public static void main(String[] args) throws Exception {
  20.                  long start=System.currentTimeMillis();
  21.          new P1();
  22.          long end=System.currentTimeMillis();
  23.          System.out.println("花費: "+(end-start)+" 毫秒");
  24.         }
  25. }
複製代碼

TOP

  1. public class Ch01 {

  2.         Ch01()
  3.         {
  4.                 System.out.println("費氏數列第12項: "+f(12));
  5.         System.out.println("費氏數列第23項: "+f(23));
  6.         System.out.println("費氏數列第37項: "+f(37));
  7.         System.out.println("費氏數列第42項: "+f(42));
  8.         }
  9.         int f(int x)
  10.         {
  11.                 if(x<2)
  12.                         return x;
  13.                 else
  14.                         return f(x-1)+f(x-2);
  15.         }
  16.         public static void main(String[] args) {
  17.                 long start=System.currentTimeMillis();
  18.                 new Ch01();
  19.                 long end=System.currentTimeMillis();
  20.                 System.out.println("花費: "+(end-start)+" 毫秒");
  21.         }
  22. }
複製代碼
  1. public class Ch01 {

  2.         Ch01()
  3.         {
  4.                 long data[]=new long[90];
  5.                 data[0]=0;
  6.                 data[1]=1;
  7.                 for(int i=2;i<90;i++)
  8.                 {
  9.                         data[i]=data[i-1]+data[i-2];
  10.                 }
  11.                 System.out.println("費氏數列第12項: "+data[12]);
  12.         System.out.println("費氏數列第23項: "+data[23]);
  13.         System.out.println("費氏數列第37項: "+data[37]);
  14.         System.out.println("費氏數列第42項: "+data[42]);
  15.         System.out.println("費氏數列第59項: "+data[59]);
  16.         System.out.println("費氏數列第89項: "+data[89]);
  17.         }
  18.         public static void main(String[] args) {
  19.                 long start=System.currentTimeMillis();
  20.                 new Ch01();
  21.                 long end=System.currentTimeMillis();
  22.                 System.out.println("花費: "+(end-start)+" 毫秒");
  23.         }
  24. }
複製代碼

TOP

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;


  4. public class Ch02 {
  5.     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  6.         Ch02() throws Exception, Exception
  7.         {
  8.                 long x[]=new long[90],input;
  9.                 input=Integer.parseInt(br.readLine());
  10.                 x[0]=0;
  11.                 x[1]=1;
  12.                 for(int i=2; i<x.length; i++)
  13.                         x[i]=x[i-1]+x[i-2];               
  14.                 System.out.println(x[(int) input]);
  15.         }
  16.         public static void main(String[] args) throws Exception {
  17.                 long start=System.currentTimeMillis();
  18.                 new Ch02();
  19.                 System.out.println(System.currentTimeMillis()-start+"ms");
  20.         }
  21. }
複製代碼

TOP

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;


  4. public class Ch02 {
  5.     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  6.         Ch02() throws Exception, Exception
  7.         {
  8.                 int input;
  9.                 input=Integer.parseInt(br.readLine());
  10.                 System.out.println(f(input));
  11.         }
  12.         int f(int n)
  13.         {
  14.                 if(n<2)
  15.                         return n;
  16.                 else
  17.                         return f(n-2)+f(n-1);
  18.         }
  19.         public static void main(String[] args) throws Exception {
  20.                 long start=System.currentTimeMillis();
  21.                 new Ch02();
  22.                 long end=System.currentTimeMillis();
  23.                 System.out.println((end-start)+"ms");
  24.         }
  25. }
複製代碼

TOP

  1. package test;

  2. public class test {
  3.        
  4.         test(){
  5.                 long data[]=new long[90];
  6.                 data[0]=0;
  7.                 data[1]=1;
  8.                 for(int i=2; i<90; i++)
  9.                         data[i]=data[i-1]+data[i-2];
  10.                 System.out.println("費氏數列第12項: "+data[12]);
  11.         System.out.println("費氏數列第23項: "+data[23]);
  12.         System.out.println("費氏數列第37項: "+data[37]);
  13.         System.out.println("費氏數列第42項: "+data[42]);
  14.         System.out.println("費氏數列第59項: "+data[59]);
  15.         System.out.println("費氏數列第89項: "+data[89]);
  16.         }

  17.         public static void main(String[] args) {
  18.                 long star=System.currentTimeMillis();
  19.                 new test();
  20.                 long end=System.currentTimeMillis();
  21.                 System.out.println("花費 "+(end-star)+" 毫秒");
  22.         }
  23. }
複製代碼

TOP

  1. public class Rickroll {
  2.         Rickroll(){
  3.                 System.out.println("費氏數列第12項: "+func(12));
  4.         System.out.println("費氏數列第23項: "+func(23));
  5.         System.out.println("費氏數列第37項: "+func(37));
  6.         System.out.println("費氏數列第42項: "+func(42));
  7.         }
  8.         public static void main(String[] args) {
  9.                 long s=System.currentTimeMillis();
  10.                 new Rickroll();
  11.                 long e=System.currentTimeMillis();
  12.                 System.out.println("使用遞迴的秒數: "+(e-s)+" 毫秒");
  13.         }
  14.         int func(int n){
  15.                 if(n<2)
  16.                         return n;
  17.                 else
  18.                         return func(n-2)+func(n-1);
  19.         }
  20. }
複製代碼
  1. public class Hi {
  2.         Hi(){
  3.                 long data[]=new long[90];
  4.                 data[0]=0;
  5.                 data[1]=1;
  6.                 for(int i=2;i<90;i++){
  7.                         data[i]=data[i-2]+data[i-1];
  8.                 }
  9.                 System.out.println("費氏數列第12項: "+data[12]);
  10.         System.out.println("費氏數列第23項: "+data[23]);
  11.         System.out.println("費氏數列第37項: "+data[37]);
  12.         System.out.println("費氏數列第42項: "+data[42]);
  13.         System.out.println("費氏數列第59項: "+data[59]);
  14.         System.out.println("費氏數列第89項: "+data[89]);
  15.         }
  16.         public static void main(String[] args) {
  17.                 long s=System.currentTimeMillis();
  18.                 new Hi();
  19.                 long e=System.currentTimeMillis();
  20.                 System.out.println("使用動態規劃的秒數: "+(e-s)+" 毫秒");
  21.         }
  22. }
複製代碼
林祐霆

TOP

  1. public class ha {

  2.         ha() throws Exception
  3.         {
  4.                 System.out.println("費氏數列第12項: "+f(12));
  5.                 System.out.println("費氏數列第23項: "+f(23));
  6.                 System.out.println("費氏數列第37項: "+f(37));
  7.                 System.out.println("費氏數列第42項: "+f(42));
  8.         }
  9.         int f(int n)
  10.         {
  11.                 if(n<2)
  12.                 {
  13.                         return n;
  14.                 }
  15.                 else
  16.                 {
  17.                         return f(n-2)+f(n-1);
  18.                 }
  19.         }
  20.         public static void main(String[] args) throws Exception {               
  21.                 long start=System.currentTimeMillis();
  22.                 new ha();
  23.                 long end=System.currentTimeMillis();
  24.                 System.out.println("花費: "+(end-start)+" 毫秒");
  25.         }
  26. }
複製代碼
  1. public class ha {

  2.         ha() throws Exception
  3.         {
  4.                 long data[]=new long[90];
  5.                 data[0]=0;
  6.                 data[1]=1;
  7.                 for(int i=2; i<90; i++)
  8.                 {
  9.                         data[i]=data[i-2]+data[i-1];
  10.                 }
  11.                 System.out.println("費氏數列第12項: "+data[12]);
  12.                 System.out.println("費氏數列第23項: "+data[23]);
  13.                 System.out.println("費氏數列第37項: "+data[37]);
  14.                 System.out.println("費氏數列第42項: "+data[42]);
  15.                 System.out.println("費氏數列第59項: "+data[59]);
  16.                 System.out.println("費氏數列第89項: "+data[89]);
  17.         }

  18.         public static void main(String[] args) throws Exception {               
  19.                 long start=System.currentTimeMillis();
  20.                 new ha();
  21.                 long end=System.currentTimeMillis();
  22.                 System.out.println("花費: "+(end-start)+" 毫秒");
  23.         }
  24. }
複製代碼

TOP

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;

  3. public class P1{
  4.                
  5.         long data[]=new long[90];
  6.         P1() throws Exception
  7.         {               
  8.                
  9.                 data[0]=0;
  10.                 data[1]=1;
  11.                 for(int i=2;i<90;i++)
  12.                 {
  13.                         data[i]=data[i-2]+data[i-1];
  14.                 }
  15.                 System.out.println("費氏數列第12項: "+data[12]);
  16.                 System.out.println("費氏數列第23項: "+data[23]);
  17.                 System.out.println("費氏數列第37項: "+data[37]);
  18.                 System.out.println("費氏數列第42項: "+data[42]);
  19.                 System.out.println("費氏數列第59項: "+data[59]);
  20.                 System.out.println("費氏數列第89項: "+data[89]);
  21.         }
  22.         
  23.         public static void main(String[] args) throws Exception{
  24.                 long start=System.currentTimeMillis();
  25.                 new P1();
  26.                 long end=System.currentTimeMillis();
  27.                 System.out.println("花費: "+(end-start)+" 毫秒");
  28.         }
  29. }
複製代碼
  1. public class Ch01 {

  2.         Ch01()
  3.         {
  4.                 System.out.println("費氏數列第12項: "+f(12));
  5.                 System.out.println("費氏數列第23項: "+f(23));
  6.                 System.out.println("費氏數列第37項: "+f(37));
  7.                 System.out.println("費氏數列第42項: "+f(42));
  8.         }

  9.         int f(int n)
  10.         {
  11.                 if(n<2)
  12.                         return n;
  13.                 else
  14.                         return f(n-2)+f(n-1);
  15.         }

  16.         public static void main(String[] args) {
  17.                 long start=System.currentTimeMillis();
  18.                 new Ch01();
  19.                 long end=System.currentTimeMillis();
  20.                 System.out.println("花費: "+(end-start)+" 毫秒");
  21.         }

  22. }
複製代碼

TOP

返回列表