📜  非斐波那契数

📅  最后修改于: 2021-05-06 09:25:46             🧑  作者: Mango

给定正整数n,任务是打印第n个非斐波那契数。斐波那契数定义为:

Fib(0) = 0
Fib(1) = 1
for n >1, Fib(n) = Fib(n-1) + Fib(n-2)

前几个斐波那契数是0、1、1、2、3、5、8、13、21、34、55、89、141,……..
例子 :

Input : n = 2
Output : 6

Input : n = 5
Output : 10

一个简单的解决方案是找到找到的斐波那契数字,然后打印找到的斐波那契数字中不存在的前n个数字。
更好的解决方案是使用斐波那契数的公式,并保持两个连续斐波那契数之间的差增加。差距之和的值是到目前为止所看到的非斐波那契数的计数。以下是上述想法的实现。

C++
// C++ program to find n'th Fibonacci number
#include
using namespace std;
 
// Returns n'th Non-Fibonacci number
int nonFibonacci(int n)
{
    // curr is to keep track of current fibonacci
    // number, prev is previous, prevPrev is
    // previous of previous.
    int prevPrev=1, prev=2, curr=3;
 
    // While count of non-fibonacci numbers
    // doesn't become negative or zero
    while (n > 0)
    {
        // Simple Fibonacci number logic
        prevPrev = prev;
        prev = curr;
        curr = prevPrev + prev;
 
        // (curr - prev - 1) is count of
        // non-Fibonacci numbers between curr
        // and prev.
        n = n - (curr - prev - 1);
    }
 
    // n might be negative now. Make sure it
    // becomes positive by removing last added
    // gap.
    n = n + (curr - prev - 1);
 
    // n must be now positive and less than or equal
    // to gap between current and previous, i.e.,
    // (curr - prev - 1);
 
    // Now add the positive n to previous Fibonacci
    // number to find the n'th non-fibonacci.
    return prev + n;
}
 
// Driver code
int main()
{
   cout << nonFibonacci(5);
   return 0;
}


Java
// Java program to find
// n'th Fibonacci number
import java.io.*;
 
class GFG
{
    // Returns n'th Non-
    // Fibonacci number
    static int nonFibonacci(int n)
    {
         
    // curr is to keep track of
    // current fibonacci number,
    // prev is previous, prevPrev
    // is previous of previous.
    int prevPrev = 1, prev = 2, curr = 3;
 
    // While count of non-fibonacci
    // numbers doesn't become
    // negative or zero
    while (n > 0)
    {
        // Simple Fibonacci number logic
        prevPrev = prev;
        prev = curr;
        curr = prevPrev + prev;
 
        // (curr - prev - 1) is count
        // of non-Fibonacci numbers
        // between curr and prev.
        n = n - (curr - prev - 1);
    }
 
    // n might be negative now. Make
    // sure it becomes positive by
    // removing last added gap.
    n = n + (curr - prev - 1);
 
    // n must be now positive and less
    // than or equal to gap between
    // current and previous, i.e.,
    // (curr - prev - 1);
 
    // Now add the positive n to
    // previous Fibonacci number
    // to find the n'th non-fibonacci.
    return prev + n;
    }
     
    // Driver Code
    public static void main (String args[])
    {
        System.out.println(nonFibonacci(5));
    }
}
 
// This code is contributed by aj_36


Python
# Python program to find n'th
# Fibonacci number
 
# Returns n'th Non-Fibonacci
# number
def nonFibonacci(n):
 
    # curr is to keep track of
    # current fibonacci number,
    # prev is previous, prevPrev
    # is previous of previous.
    prevPrev = 1
    prev = 2
    curr = 3
 
    # While count of non-fibonacci
    # numbers doesn't become
    # negative or zero
    while n > 0:
        prevPrev = prev
        prev = curr
        curr = prevPrev + prev
         
        # (curr - prev - 1) is
        # count of non-Fibonacci
        # numbers between curr
        # and prev.
        n = n - (curr - prev - 1)
     
    # n might be negative now.
    # Make sure it becomes positive
    # by removing last added gap.
    n = n + (curr - prev - 1)
     
    # n must be now positive and
    # less than or equal to gap
    # between current and previous,
    # i.e., (curr - prev - 1)
     
    # Now add the positive n to
    # previous Fibonacci number to
    # find the n'th non-fibonacci.
    return prev + n
 
# Driver code
print(nonFibonacci(5))
 
# This code is contributed by anuj_67.


C#
// C# program to find
// n'th Fibonacci number
using System;
 
class GFG
{
    // Returns n'th Non-
    // Fibonacci number
    static int nonFibonacci (int n)
    {
         
    // curr is to keep track of
    // current fibonacci number,
    // prev is previous, prevPrev
    // is previous of previous.
    int prevPrev = 1, prev = 2, curr = 3;
 
    // While count of non-fibonacci
    // numbers doesn't become
    // negative or zero
    while (n > 0)
    {
        // Simple Fibonacci number logic
        prevPrev = prev;
        prev = curr;
        curr = prevPrev + prev;
 
        // (curr - prev - 1) is count
        // of non-Fibonacci numbers
        // between curr and prev.
        n = n - (curr - prev - 1);
    }
 
    // n might be negative now. Make
    // sure it becomes positive by
    // removing last added gap.
    n = n + (curr - prev - 1);
 
    // n must be now positive and less
    // than or equal to gap between 
    // current and previous, i.e.,
    // (curr - prev - 1);
 
    // Now add the positive n to
    // previous Fibonacci number
    // to find the n'th non-fibonacci.
    return prev + n;
    }
     
    // Driver Code
    public static void Main ()
    {
    Console.WriteLine (nonFibonacci(5));
    }
}
 
//This code is contributed by aj_36


PHP
 0)
    {
        // Simple Fibonacci
        // number logic
        $prevPrev = $prev;
        $prev = $curr;
        $curr = $prevPrev + $prev;
 
        // (curr - prev - 1) is count
        // of non-Fibonacci numbers
        // between curr and prev.
        $n = $n - ($curr - $prev - 1);
    }
 
    // n might be negative now. Make
    // sure it becomes positive by
    // removing last added gap.
    $n = $n + ($curr - $prev - 1);
 
    // n must be now positive and
    // less than or equal to gap
    // between current and previous, 
    // i.e., (curr - prev - 1);
 
    // Now add the positive n to
    // previous Fibonacci number
    // to find the n'th non-fibonacci.
    return $prev + $n;
}
 
// Driver code
echo nonFibonacci(5);
 
// This code is contributed by m_kit
?>


Javascript


输出 :

10