0

这个程序应该从用户那里得到一个斐波那契数,程序将计算它是什么,同时确保用户输入一个正数和一个不小于斐波那契数 70 的数字。所以,如果用户输入 7,它应该打印 13。 fibcalc() 方法应该进行计算。当我尝试编译程序时,我收到错误“斐波那契类中的方法 fibcalc 不能应用于给定类型:System.out.printf("Fibonacci #%d is %f", num, fibcalc(num, x3));和”找不到符号“return 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;

}
  }

可能还有其他我错过的问题。我对java很陌生。提前致谢。

4

3 回答 3

2

fibcalc()方法只有一个int参数,但您使用两个参数调用它。

将呼叫从

fibcalc(num, x3)

fibcalc(num)

即将该行更改为:

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

此外,如果您想要准确的结果数字,请从 using 更改double为 using BigInteger,它可以准确处理任意大的数字。

于 2013-04-09T03:39:05.107 回答
0

如果要计算斐波那契数,可以使用直接(非递归、非迭代)公式计算斐波那契数

Fib(n) = (pow((1+sqrt(5))/2, n) + pow((1-sqrt(5))/2, n)) / sqrt(5)

事实证明,对于所有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);
}
于 2013-04-09T04:02:33.677 回答
0

您还可以使用以下计算器计算斐波那契数列(使用 Javascript):在此处输入链接描述

于 2017-03-16T22:40:48.993 回答