有一对兔子,从出生后第3个月起每个月都生一兔子,小兔子长到第三个月后每个月又生一兔子,问第X月有几只兔子我知道递归和第三项等于前两项和的写法,据说递归都可以改成FOR循环,求FOR循环解! 递归和找规律的就不要发了!

解决方案 »

  1.   

    [/code]
    #include <stdio.h>#define MAX 44int num[44];int main(void) {
    int n;
    //由于第一个月和第二个月的兔子数是知道的
    //可以预处理,将数列中的值都求出来,保存在一个数组里面
    //由于数列的增长非常快
    //int类型只能保存数列的前44项 
    num[0] = 1;
    num[1] = 1;
    for(int i = 2 ; i <= MAX ; ++i) {
    num[i] = num[i - 1] + num[i - 2];
    }

    //输入你想要得到的月份的兔子数
    int month;
    while(scanf("%d", &month) != EOF) { //ctrl + z退出输入 
    //直接从num数组中获得数据
    printf("%d\n", num[month]); 

    return 0;
    }
    [/code]
      

  2.   


    import java.lang.*;public class Test {

    public static void main(String[] args) {
    int num[] = new int[44];
    num[0] = 1;
    num[1] = 1;

    int i = 0;
    for(;i <= 44 ; ++i) {
    num[i] = num[i - 1] + num[i - 2];
    }

    //和LS的程序相同处理 

    }
    }
      

  3.   

    斐波那契数列public class Test {    public static void main(String[] args) {       
            long n = fibonacci(40);
            System.out.println("F(40) = " + n);
        }    public static long fibonacci(int month) {
            if(month < 1) {
                return 0;
            }
            double sqrt5 = Math.sqrt(5);
            double a = Math.pow((1 + sqrt5) / 2, month);
            double b = Math.pow((1 - sqrt5) / 2, month);
            double r = (sqrt5 / 5) * (a - b);
            return Math.round(r);
        }
    }公式:
      

  4.   

    每个月兔子增加的数量为:
    第一个月:1
    第二个月:1
    第三个月:2
    第四个月:3



    第n个月为:第n-1个月+第n-2个月
    程序为:
    class RabittsSum
    {
        public static sum(int n)
        {
            int number_rabit=0;
            int first_temp=0;
            int second_temp=1;
            int temp=0;
             for(int i=1;i<=n;i++)
            {
                number_rabit+=second_temp;
                temp=second_temp;
                second_temp+=first_temp;
                first_temp=temp;
            }
            
        }
    }