最初のアルゴリズム

5281 ワード

【プログラム1】テーマ:古典的な質問:ウサギのペアは、生まれてから3ヶ月目から毎月1対のウサギを産み、ウサギは4ヶ月目に成長してから毎月1対のウサギを産み、もしウサギが死ななければ、毎月のウサギはどのくらいペアがありますか?
アルゴリズム1:
public class ArithmeticTest1 {

    public static void main(String[] args){

        int[] count= new int[1000];long start=System.currentTimeMillis();

        for(i=1;i<=1000;i++) {

            if (i == 1 || i == 2) {

                System.out.println(i + ":" + 1);

                count[i]=1;

            }else{

               count[i]=count[i-1]+count[i-2];

                System.out.println(i + ":" + count[i]);

            }

        }

        long end=System.currentTimeMillis();

        System.out.println("    :"+(end-start));

    }

}

実行時間は42 ms程度です.
アルゴリズム2:
public class ArithmeticTest1 {

    public static void main(String[] args){

       ArrayList<Integer> count1=new ArrayList<Integer>();

        int i=0;

        long start=System.currentTimeMillis();

        for(i=1;i<=1000;i++) {

            if (i == 1 || i == 2) {

                System.out.println(i + ":" + 1);

                count1.add(1);

            }else{ 

                count1.add(count1.get(i-2)+count.get(i-3));

                System.out.println(i + ":" + count1.get(i-1));

            }

        }

        long end=System.currentTimeMillis();

        System.out.println("    :"+(end-start));

}

実行時間は約44 ms程度である.
アルゴリズム3:
public class ArithmeticTest1 {

    public static void main(String[] args){

        int i=0;

        long start=System.currentTimeMillis();

        math myMath = new math();

        for(i=1;i<=1000;i++)

            System.out.println(i + ":" + myMath.f(i));

        long end=System.currentTimeMillis();

        System.out.println("    :"+(end-start));

    }

    static class math{

        public int f(int x){

            if(x==1||x==2)

                return 1;

            else

                return f(x-1)+f(x-2);

        }

    }

}

実行時間n秒長.