精华内容
下载资源
问答
  • 您的代码有2个问题:结果存储在只能处理前48个斐波那契数字的int中,此后整数填充减位,结果是错误的。但是您永远无法运行fibonacci(50)。该代码fibonacci(n - 1) + fibonacci(n - 2)是非常错误的。问题是它调用...

    您的代码有2个问题:

    结果存储在只能处理前48个斐波那契数字的int中,此后整数填充减位,结果是错误的。

    但是您永远无法运行fibonacci(50)。

    该代码

    fibonacci(n - 1) + fibonacci(n - 2)

    是非常错误的。

    问题是它调用斐波那契的次数不是50次,而是更多次。

    首先,它 每次调用fibonacci(n)越差,就称为fibonacci(49)+ fibonacci(48),

    其次称为fibonacci(48)+ fibonacci(47)和fibonacci(47)+ fibonacci(46)

    ,因此复杂度是指数级的。

    5e95c2276bc5ad0667c6143020e0e535.png

    非递归代码的方法:

    double fibbonaci(int n){

    double prev=0d, next=1d, result=0d;

    for (int i = 0; i < n; i++) {

    result=prev+next;

    prev=next;

    next=result;

    }

    return result;

    }

    展开全文
  • java斐波那契数列

    千次阅读 2018-12-07 16:56:41
    java斐波那契数列 问题描述: 一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和。创建一个方法,接受一个整数参数,并显示从第一个元素开始总共...

    java斐波那契数列

    问题描述:

    一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和。创建一个方法,接受一个整数参数,并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。例如,如果运行 java Fibonacci 5(Fibonacci为类名),那么输出应该是1、1、2、3、5。

    问题思路:

    (1)构造主类、主方法;

    (2)构造Fibonacci类(定义类的顺序:定义属性——>定义构造方法——>定义普通方法)

    (3)普通方法中采用递归思路;

    (4)在主类中生成对象,调用Fibonacci类中普通方法。

    class Fibonacci{
        private int number;//私有属性
    
        public Fibonacci(int number){//构造方法(生成对象时使用)
            this.number=number;//实例化对象,此时this调用本类属性
            //构造方法可为类中属性做初始化操作,是因构造方法的调用和对象内存分配几乎是同步完成的
        }
    
        public int result(int number){//普通方法
            if(number==1){
                return 1;
            }
            else if(number==2){
                return 1;
            }
            else{
                return result(number-1)+result(number-2);//递归
            }
        }
    }
    public class Test{//主类
        public static void main(String[] args){
            Fibonacci num=new Fibonacci(9);
            //根据Fibonacci类生成一个Fibonacci对象,对象名称叫做num
            for(int i=1;i<=9;i++){//输出
                System.out.print(num.result(i)+" ");
            }
        System.out.println("");//换行
        }
    }

    结果如下:

    展开全文
  • 问题描述: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。假如兔子都不死,要求输出N个月内兔子的数量是多少。 问题分析: 从问题描述可以得知,每只兔子在出生后都...

    问题描述:

    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。假如兔子都不死,要求输出N个月内兔子的数量是多少。

    问题分析:

    从问题描述可以得知,每只兔子在出生后都需要一个成长期来发育,等到成熟期时才能开始生殖新的兔子,并且可以一直不死亡,可以一直生殖。所以

    • 第一个月:一对初始的兔子
    • 第二个月:兔子在成长
    • 第三个月:两对兔子,第二对刚出生
    • 第四个月:三对兔子,第二对在成长,第三对刚出生
    • 第五个月:五对兔子,第三对兔子在成长,出生4,5
    • 第六个月:八对兔子,第四队第五对在成长,本次出生6,7,8,
    • 第七个月:13对兔子:第6,7,8在成长,出生,9,10,11,12,13
    • 从上述情况可看出,每个月的兔子数量是上一个月的基础数量加上上上个月的兔子的数量(上上个月的兔子在这个月就会处于成熟生殖状态,每一对兔子都能生一对新的兔子)
    • 在编程中,解决这类问题可以使用,递归的方法来解决,即使方法体自己调用自己。

    代码实现:

    public class RecursionRabbits {
    
    	public static void main(String[] args) {
    		System.out.println("您想计算多少个月后兔子的数量:");
    		Scanner key=new Scanner(System.in);
    		int month=key.nextInt();
    		System.out.println("该月的兔子数量为:"+born(month));
    		key.close();
    	}
    	public static int born(int month) {
    		//第一对兔子还处在成长期,所以前两个月的兔子数量都是一
    		if(month==1||month==2) {
    			return 1;
    		}else {
    			//从第三个月开始,上上个月的兔子就处于成熟期,可以开始生小兔子
    			return born(month-1)+born(month-2);
    		}
    	}
    
    }
    

    在这个代码中,born方法的返回值为int,int的最大值为2147483647,所以当月份较大的时候,可能会超出这个最大值,造成异常。

    展开全文
  • 斐波那契数列 背景介绍: 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1...

    斐波那契数列

    背景介绍:

    斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

    题目要求:斐波那契数列 求前20项。

    方法一:递归

    分析:

    在数学上,斐波纳契数列以如下被以递推的方法定义:

    F(1)=1,F(2)=1

    F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

    这个数列从第3项开始,每一项都等于前两项之和。

    程序如下:

    class Test1{
    
        public static void main(String[]args){
    
            for(int n=1;n<=20;n++){
    
                System.out.println(fibo(n));
    
            }
    
        }
    
    
         public static int fibo (int n){
    
            if(n==1||n==2){                 
    
                return 1;
    
            }
    
            return fibo(n-1)+fibo(n-2);    
        }
    
    }
    

    方法二;迭代

    程序如下:

    class Test2{
    
        public static void main(String[]args){
    
            fibolterator(n);
    
        }
    
         public static void fibolterator(int n){
    
            int a=1;
    
            int b=1;
    
            System.out.println(a);
    
            System.out.println(b);
    
            int count=2;             
    
            int c;
    
            while(true){
    
                c=a+b;
    
                System.out.println(c);
    
                count++;
    
                if(count==n){
    
                    return;
    
                }
    
                a=b;
    
                b=c;
    
            }
    
        }
    
    }
    

     

    汉诺塔

    背景介绍:

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

    分析:

    将X上的金片如何移到Z上过程如下:

    X -> Z
    X -> Y
    Z -> Y
    X -> Z
    Y -> X
    Y -> Z
    X -> Z

    那么64个黄金片可以看为

    64个 X->Z

        前63个 X->Y

            前62个 X->Z

     

            第63个 X->Y

            前62个 Z->Y

        第64个 X->Z

        前63个 Y->Z

            前62个 Y->X

            第63个 Y->Z

            前62个 X->Z

    以此递推

    实现代码如下:

    class Hanno{
        public static void main(String[] args){
            //盘子的个数 出发 中间 目的
            hanno(64,"X","Y","Z");
        }                                     
        public static void hanno(int n,String begin,String mid,String end){
            if(n==1){
                System.out.println(begin+" -> "+end);
            }else{
                hanno(n-1,begin,end,mid);
                System.out.println(begin+" -> "+end);
                hanno(n-1,mid,begin,end);
            }
        }
    }

     

    展开全文
  • 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算...
  • 【计算机笔记】Java 斐波那契数列

    千次阅读 2019-12-16 21:43:28
    10.1 斐波那契数列 题目描述 求斐波那契数列的第 n 项,n <= 39。 解题思路 如果使用递归求解,会重复计算一些子问题。例如,计算 f(4) 需要计算 f(3) 和 f(2),计算 f(3) 需要计算 f(2) 和 f(1),可以看到 f...
  • 斐波那契数列问题:如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第三个月里,又能开始生1对小兔子,假定在不发生死亡的情况下,由一对初生的兔子开始,1年后能繁殖出多少对兔子?首先手工计算来总结规律...
  • 1.用Java解决斐波那契数列问题 1.1思路 斐波那契数列 0 1 1 2 3 5 8 13 21 34 55 89… 可知从第三项开始所知结果皆是前两项的和, 即设变量fibonacci();设参数n 用递归的放法来解决问题。 递归就是将问题拆分为若干...
  • 效率问题的方法就是采用非递归的方式。非递归的思想 当n =1 或者 n=2的时返回1。当n大于2时,通过for循环改变值来实现。如:初始化两个变量num1 = 1, num2 =1,把它们想象成f(1) 和 f(2),在循环体中改变它们对应...
  • 斐波那契问题(java)

    2017-02-19 20:40:00
    F(n)=F(n-1)+F(n-2) 1.迭代实现,O(2的N次方) 1 /** 2 * 斐波那契 迭代实现 3 * @param n 4 * @return 5 */ 6 public int Fabonacci_1(int n){ 7 if(n<0)return 0; 8 ...
  • 在日常生活中,方法可以理解为要做某件事情,而采取的解决方法比如:小明刚出家门,要去学校上课,这就面临一个问题需要解决,小明应该怎么去学校呢?有什么解决办法吗?可以采用坐公交车或者走路又或者坐出租车的...
  • * 斐波那契数列 * * @author Administrator 记住两个方法:1.O(n)时间复杂度用循环; 2.O(logn)用矩阵相乘 切记不要用递归 */ public class Demo2 { /* * 方法一:循环 时间复杂度O(n) */ public
  • 问题描述 斐波那契数列指的是这样一个数列: 1,1,2,3,5,8,13,21… 这个数列从第3项开始,每一项都等于前两项之和。 设an为该数列的第n项(),那么这句话可以写成如下形式: 递归实现 import java.util.Scanner; ...
  • java斐波那契

    2016-04-25 23:09:21
    各个oj上都能碰到斐波那契数列这种经典的问题,我的博客里面也写过斐波那契算法之类的问题,这次不讨论快速幂去解决斐波那契,这次是来优化递归来计算斐波那契 废话不多说直接上代码: /** *@author:StormMaybin ...
  • Java斐波那契数列

    2021-02-02 10:46:21
    Java:斐波那契数列 题目描述:求斐波那契数列的第N项。 问题分析: a.斐波那契数列:1 1 2 3 5 8 13...... b.根据观察我们可以发现这个数列的特征就是除了第一位和第二位数字以外,其余的都是前两项数字之和...
  • 首先给出斐波那契数列的定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1...
  • 题外由于idea原因 用注解test无法在控制台上输入所以写死到程序里了,版本都30.9102了为什么还是这样啊,intelJ你们该反思了!...~~斐波那契的认识斐波那契数列前2项为1,从第3项开始为该项的前2项和。eg:1,1,2...
  • 做多了基于斐波那契数列问题的变形题目,现在要干撸斐波那契数列,突然有点不知所措了,往常结合题目语境的时候都能做出来,可是斐波那契数列到底是什么呢?让我们来复习一下: 斐波那契数列,又称黄金分割数列,...
  • Java实现斐波那契数列

    2020-12-18 11:50:41
    斐波那契数列问题问题描述解决方案实现代码 问题描述 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,...
  • 比较有名的兔子问题,本质上体现的是斐波那契数列 有两种方法实现,一个是用数组迭代,一个是用函数递归 废话不多说,首先来看数组迭代的代码 import java.util.Scanner; public class FeiBoNaQi { public ...
  • 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) (1)求前n项和 public ...
  • 斐波那契系列问题 题目描述: 给定整数N,返回斐波那契数列的第N项。 题目难度: easy 题目思路: 斐波那契数列: 又称黄金分割数列,以兔子繁殖为例而引出,故又称为“兔子数列”,指的是这样一个数列:1、...
  • 斐波那契数列指的是这样一个数列 0, 1, 1, 2,3, 5, 8, 13, 21, 34, 55, 89, 144, ...对于这个数列只能说将兔子生产周期第为3月,如果生成周期变成4月这个...Java兔子繁殖问题斐波那契数列又因数学家列昂纳多·斐波那...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 649
精华内容 259
关键字:

java斐波那契问题

java 订阅