黑马程序员技术交流社区

标题: 这题差点转不过弯 [打印本页]

作者: 15626187339    时间: 2016-11-8 22:14
标题: 这题差点转不过弯
1.用循环实现不死神兔
        故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。
        在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔,
        再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡,
        问:一对刚出生的兔子,一年内繁殖成多少对兔子?
       
      如         1 1 2 3 5 8 13 21

package com.lin.homeWork;

import java.util.Scanner;

public class Day_17
{
        public static void main(String[] args)
        {
                Scanner sc = new Scanner(System.in);
                while(sc.hasNext())
                {
                        int i = sc.nextInt();
                        int countOfRabbit = Exercises_day17_1.countOfRabbit(i);
                        System.out.println(countOfRabbit);
                        Exercises_day17_1.count(i);
                }
        }
}

class Exercises_day17_1
{
        public static int countOfRabbit(int months)
        {
                if(months==1 || months==2)
                {
                        return 1;
                }
                return countOfRabbit(months-1) + countOfRabbit(months - 2);
        }
       
        /*
         * 1
         * 1
         * 1  1 =  2
         * num1 = 1
         * num2 = 2
         * 1  2 = 3
         * temp = num1
         * num1 = num2
         * num2 = num1+temp
         * 2  3 = 5
         * temp = num1
         * num1 = num2
         * num2 = num1+temp
         * 3  5 = 8
         */
        public static void count(int months)
        {
                // 1月 1
                int num1 = 0;
                int num2 = 0;
                for(int i=0; i<months; i++)
                {
                        if(i==0)
                        {
                                num1 = 1;
                        }
                        int temp = num1;
                        num1 = num2;
                        num2 = num1 + temp;
                }
                System.out.println(num2);
        }
}

作者: 695783362    时间: 2016-11-8 22:34
这个蛮有意思的


作者: peng84    时间: 2016-11-8 23:00
有点复杂

作者: anTG    时间: 2016-11-8 23:03
经典题目,好复杂的说
作者: 凉薄繁华丶悲伤    时间: 2016-11-8 23:38
斐波那契数列而已,学了数组之后,直接定义数组,无非就是前两项只和是后一项。就把这个数列搞定了,剩下就是要数列出来就遍历数组,要求和就用for循环数组元素相加。这个不难,加油

作者: Jarc    时间: 2016-11-8 23:59
递归很简单

作者: L10052108    时间: 2016-11-9 16:38
Jarc 发表于 2016-11-8 23:59
递归很简单

怎么可能是递归,方法调用方法本身呢
作者: 不吃大米    时间: 2016-11-9 20:17
package 拓展练习题;

import java.util.Scanner;

//1 1 2 3 5 8 13 21
public class a {
       
        public static void main(String[] args){
                System.out.println("输入月份时长");
                int n = new Scanner(System.in).nextInt();
                System.out.println("第"+n+"个月兔子总数为"+递归(n));
        }
        private static int 递归(int n){
                if(n==1 || n==2)
                   return 1;
                else
                   return 递归(n-1)+递归(n-2);
        }
       
}
作者: SuperLan    时间: 2016-11-9 21:43
这道题有意思

作者: Jarc    时间: 2016-11-11 12:23
L10052108 发表于 2016-11-9 16:38
怎么可能是递归,方法调用方法本身呢

有个出口就行了啊,大哥

作者: L10052108    时间: 2016-11-14 11:03
不吃大米 发表于 2016-11-9 20:17
package 拓展练习题;

import java.util.Scanner;

没想到,确实可以使用递归。受教了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2