兔子问题,斐波纳契数列

来源:互联网 发布:父亲与女儿的界限知乎 编辑:程序博客网 时间:2024/05/03 22:50

题目:古典问题(斐波纳契数列):有一对兔子,从出生后3个月起每个月都生一对兔子,小兔子长到第三个月又会生一对兔子,假如兔子都不死,问每个月兔子总数?
分析规律:1 1 2 3 5 8 13 21…
从第二个月以后每个月兔子总数是前两个月兔子总数之和


1.递归算法:效率灰常低

package com.math.forth;/*** * 古典问题(斐波纳契数列):有一对兔子,从出生后3个月起每个月都生一对兔子,小兔子长到第三个月又会生一对兔子,假如兔子都不死,问每个月兔子总数? 分析:规律 * 1 1 2 3 5 8 13 21... 从第二个月以后每个月兔子总数是前两个月兔子总数之和 *  * @author wql * */public class Math01 {    public static void main(String[] args) {        int month = 2;// 给一个月数        int sum;// 兔子总数        for (int i = 1; i <= month; i++) {            sum = method(i);        }        System.out.println(sum);    }    public static int method(int month) {        if (month <= 2) {            return 1;        } else {            return method(month - 1) + method(month - 2); // 递归:这种方法效率非常低        }    }}

2.利用时间的复杂度逻辑计算,效率灰常高(int类型都不可以满足运算)

package com.math.forth;/** * @author wql * */    public class Math01 {        public static long method2(int month){        long a=1;          long b=1;          long c=0;          if(month==1||month==2)          {              return 1;          }          else          {              for(int i=3;i<=month;i++)              {                  c=a+b;                  b=a;                  a=c;              }              return a;          }      }    public static void main(String[] args) {        int month=100;//给一个月份        long sum=method2(100);        System.out.println(sum);    }}
原创粉丝点击