Determining whether a number is a Fibonacci number

前端 未结 14 1202
暗喜
暗喜 2021-01-18 05:35

I need to to write a Java code that checks whether the user inputed number is in the Fibonacci sequence.

I have no issue writing the Fibonacci sequence to output, b

相关标签:
14条回答
  • 2021-01-18 06:39

    Trying to leverage the code you have already written I would propose the following first, as it is the simplest solution (but not the most efficient):

    private static void main(string[] args)
    {
        //This will determnine which numbers between 1 & 100 are in the fibonacci series
        //you can swop in code to read from console rather than 'i' being used from the for loop
        for (int i = 0; i < 100; i++)
        {
            bool result = isFib(1);
    
            if (result)
                System.out.println(i + " is in the Fib series.");
    
            System.out.println(result);
        }
    
    }
    
    private static bool isFib(int num)
    {
        int counter = 0;
    
        while (true)
        {
            if (fib(counter) < num)
            {
                counter++;
                continue;
            }
    
            if (fib(counter) == num)
            {
                return true;
            }
    
            if (fib(counter) > num)
            {
                return false;
            }
        }
    }
    

    I would propose a more elegant solution in the generation of fibonacci numbers which leverages recursion like so:

    public static long fib(int n) 
    {
       if (n <= 1) 
          return n;
       else 
          return fib(n-1) + fib(n-2);
    }
    

    For the extra credit read: http://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers

    You will see the that there are a few more efficient ways to test if a number is in the Fibonacci series namely: (5z^2 + 4 or 5z^2 − 4) = a perfect square.

    //(5z^2 + 4 or 5z^2 − 4) = a perfect square 
    //perfect square = an integer that is the square of an integer
    private static bool isFib(int num)
    {
        double first = 5 * Math.pow((num), 2) + 4;
        double second = 5 * Math.pow((num), 2) - 4;
    
        return isWholeNumber(Math.sqrt(first)) || isWholeNumber(Math.sqrt(second));
    }
    
    private static bool isWholeNumber(double num)
    {
        return num - Math.round(num) == 0;    
    }
    
    0 讨论(0)
  • 2021-01-18 06:42

    Instead of passing the index, n, write a function that takes a limit, and get it to generate the Fibonacci numbers up to and including this limit. Get it to return a Boolean depending on whether it hits or skips over the limit, and you can use this to check whether that value is in the sequence.

    Since it's homework, a nudge like this is probably all we should be giving you...

    0 讨论(0)
提交回复
热议问题