Java 斐波那契计算

Java 斐波那契计算,java,numbers,fibonacci,Java,Numbers,Fibonacci,这个程序应该从用户那里得到一个斐波那契数,程序将计算它是什么,同时确保用户输入一个正数和一个不小于斐波那契数70的数。因此,如果用户输入7,则应打印13。应该使用fibcalc()方法进行计算。 当我尝试编译程序时,我得到错误“类Fibonacci中的fibcalc方法无法应用于给定类型:System.out.printf(“Fibonacci#%d是%f”,num,fibcalc(num,x3));和“找不到符号”返回x3;这是我的代码: import java.util.Scanner;

这个程序应该从用户那里得到一个斐波那契数,程序将计算它是什么,同时确保用户输入一个正数和一个不小于斐波那契数70的数。因此,如果用户输入7,则应打印13。应该使用fibcalc()方法进行计算。 当我尝试编译程序时,我得到错误“类Fibonacci中的fibcalc方法无法应用于给定类型:
System.out.printf(“Fibonacci#%d是%f”,num,fibcalc(num,x3));
和“找不到符号”
返回x3;
这是我的代码:

import java.util.Scanner;

public class Fibonacci
{
    public static void main ( String args[] ) 
    {
    Scanner input = new Scanner ( System.in );

        int num; 
        double x3 = 0;


           System.out.print("Which Fibonacci number would you like? ");
       num = input.nextInt(); 
           do
       {
        System.out.print("Which Fibonacci number would you like? ");
        num = input.nextInt(); 
    }while(num >= 0 && num <= 70);

    System.out.printf("Fibonacci #%d is %f", num, fibcalc(num, x3));

}


public static double fibcalc(int num) 
{
    int x1 = 0;
    int x2 = 1;

        if (num == 0)

            return 0;

        else if (num == 1)

            return 1;

        else

            for (int x3 = 0; x3 < num; x3++)
                {
                    x3 = x1 + x2;
                    x1 = x2;
                    x2 = x3;
                }
                return x3;

}
  }
import java.util.Scanner;
公共类斐波那契
{
公共静态void main(字符串参数[])
{
扫描仪输入=新扫描仪(System.in);
int-num;
双x3=0;
System.out.print(“您想要哪个斐波那契数?”);
num=input.nextInt();
做
{
System.out.print(“您想要哪个斐波那契数?”);
num=input.nextInt();
}虽然(num>=0&&num,
fibcalc()
方法有一个
int
参数,但您使用两个参数调用它

把电话从

fibcalc(num, x3)

ie将该行更改为:

System.out.printf("Fibonacci #%d is %f", num, fibcalc(num));


此外,如果您希望结果中的数字准确,请从使用
double
改为使用,它可以准确地处理任意大的数字。

如果您希望计算斐波那契数,可以使用直接(非递归、非迭代):

事实证明,对于所有
n>=0
,您可以将此公式简化为:

Fib(n) = round(pow((1+sqrt(5))/2, n) / sqrt(5))
知道了这一点,您可以对
fibcalc
使用以下简单实现:

public static double fibcalc(int num) {
    return Math.floor(Math.pow((1+Math.sqrt(5))/2, num) / Math.sqrt(5) + 0.5);
}

您还可以使用以下计算器(使用Javascript)计算斐波那契序列:

x3不存在于for循环之外,因此我将在循环之外声明x3,而不是在循环之内声明x3?是的,在循环之外声明它修复了该错误。我试着实现它并得到了错误“找到精度要求int的可能LOO:long。我应该将public static int更改为public static long吗?这很奇怪。在我的示例中,任何地方都没有
long
。请看上的这个工作示例。它编译时没有警告,工作正常。我不确定是否正确使用了它。如果输入任何内容,它会给我一个奇怪的答案ng大于70,这是不应该的。@用户1858350:我已经更新了我的答案,使用
数学地板(x+0.5)
double
type),而不是
Math.round(x)
long
type)-这在n>92之后被分解。现在它适用于
n
远远超过
100
:您好,虽然提供到另一篇文章的链接是有益的,但答案应该包含解决方案。请添加更多详细信息。
Fib(n) = round(pow((1+sqrt(5))/2, n) / sqrt(5))
public static double fibcalc(int num) {
    return Math.floor(Math.pow((1+Math.sqrt(5))/2, num) / Math.sqrt(5) + 0.5);
}