当前位置: 首页 > 面试题库 >

学习Java-不完全了解此序列的计算方式(Fibonacci)

权玉泽
2023-03-14
问题内容

我正在学习Java,并且可以从网上获得以下代码并在Eclipse中运行它:

public class Fibonacci {

    public static void main (String [] args) { 
        for (int counter = 0; counter <= 3; counter++){
            System.out.printf("Fibonacci of %d is: %d\n",  counter, fibonacci(counter));

    }

    public static long fibonacci(long number) {
        if ((number == 0) || (number == 1))
             return number;
        else
             return fibonacci(number - 1) + fibonacci(number - 2);
    }
}

我试图理解它,但无法理解。因此,我遍历了代码并counter通过了fibonacci方法。计数器开始于0,这是首先传递的内容,然后1,我了解了该方法0随后传递的原因1

当达到2时: 它将返回2-1 + 2-2 = 2并且确实返回此值。
当达到3时: 它将返回3-1 + 3-2 = 3但不返回,3它将返回2

请有人可以向我解释为什么我无法弄清楚吗?

谢谢


问题答案:

首先,我必须告诉您, 此递归版本具有巨大的指数成本 。一旦了解了它的工作原理,对您的建议就是学习尾部递归性,编写 尾部递归 解决方案,
迭代 解决方案,并将它们与当前方法进行比较,以获取较高的“数字”值。

然后,您的函数基本上使用斐波那契数列的数学定义:

f0 = 1, f1 = 1, fn = fn-1 + fn-2 for all n >= 2

例如,如果我们调用fibonacci(3),则将返回fibonacci(2)+
fibonacci(1)。fibonacci(2)将首先执行,并返回fibonacci(1)+
fibonnacci(0)。然后fibonacci(1)将立即返回1,因为它是一个终止情况。与fibonnacci(0)发生的事情相同,因此现在我们计算出fibonnacci(2)=
1 + 0 =1。让我们回到fibonacci(3),它在这一点上已经部分评估:1 + fibonnacci(1)
。我们只需要计算fibonnacci(1)就可以最终返回1 +1 = 2。

即使在这个小例子中,您也可以看到我们对fibonacci(1)进行了两次评估,这就是为什么该版本是如此之慢,它多次计算相同序列值的原因,并且当“
number”很高时就很有价值。



 类似资料:
  • 本文向大家介绍java设计模式学习之工厂方法模式,包括了java设计模式学习之工厂方法模式的使用技巧和注意事项,需要的朋友参考一下 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 工厂方法模式结构图: 项目需求,创建一个雷锋工厂,大学生可以去帮助别人,志愿者也可以帮助别人做事情。 1:创建一个雷锋类,具有帮

  • 本文向大家介绍传统的机器学习算法了解吗相关面试题,主要包含被问及传统的机器学习算法了解吗时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 常见的机器学习算法: 1). 回归算法:回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。 常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regressi

  • 本文向大家介绍机器学习中的距离计算方法?相关面试题,主要包含被问及机器学习中的距离计算方法?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 设空间中两个点为 欧式距离: cos=   切比雪夫距离:max

  • 设计模式代表了经验丰富的面向对象软件开发人员使用的最佳实践。设计模式是软件开发人员在软件开发过程中遇到的一般问题的解决方法。

  • 计算机编程是编写计算机程序的行为,计算机程序是使用计算机程序设计语言编写的指令序列,以通过计算机执行指定的任务。

  • 我试图解决序列完成的问题。假设我们有基本真值序列(1,2,4,7,6,8,10,12,18,20) 我们模型的输入是一个不完整的序列。i、 e(1,2,4,10,12,18,20)。从这个不完整序列中,我们想要预测原始序列(地面真值序列)。哪些深度学习模型可以用来解决这个问题? 这是编码器-解码器LSTM体系结构的问题吗? 注:我们有数千个完整的序列来训练和测试模型。 感谢您的帮助。