当前位置: 首页 > 知识库问答 >
问题:

如何递归检查一个数是否为斐波那契数?

向子安
2023-03-14

我需要编写一个程序,递归检查一个数是否是斐波那契数;重复完成同样的任务很容易;同样,递归地找到第n个斐波那契数也很容易,但我陷入了如何使用递归检查一个数是否是斐波那契数的困境。以下是查找第n个fib的代码。编号:

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

我不知道怎么做的是如何修改上面的代码来检查给定的数字是否是斐波那契?

共有3个答案

祁杰
2023-03-14

确定一个数字是否是斐波那契数看起来是一样的,但在Java中,你可能会得到你想要的东西。

章景同
2023-03-14

这让我觉得有点笨拙,但你可以试试:

bool isFib(int numToCheck int twoPrev = 0, int prev = 1) {
    if (numToCheck == twoPrev || numToCheck == prev)
        return true;

    int currentFibNumber = twoPrev + prev;
    if (currentFibNumber == numToCheck)
        return true;
    else if (currentFibNumber > numToCheck)
        return false;

    return isFib(numToCheck, prev, currentFibNumber);
}

这基本上是使用递归迭代斐波那契数,直到生成的数超过正在检查的值或找到匹配项。

正如其他人所指出的,有一些不需要递归的解决方案。

宗穆冉
2023-03-14

传统的方法是使用格塞尔测试。N是斐波那契数当且仅当5N24或5N2-4是平方数。这是在这个问题和这个问题中讨论的。您也可以在这里找到示例,但本页有Python代码(尽管很容易理解)。

现在,如果你被要求专门使用递归。。。一种方法就是开始生成斐波那契数,直到生成的数大于或等于您要测试的数。如果存在匹配,则测试的数字属于斐波那契序列。如果没有匹配,并且生成的数字大于被测试的数字,则被测试的数字不是斐波那契数。

下面是一个基本的(丑陋的)例子:

bool isFibonacci( int testedNumber, int a = 1, int b = 1 )
{
    if( testedNumber == 0 || testedNumber == 1 )
        return true;//returning true for 0 and 1 right away.
    int nextFib = a + b;//getting the next number in the sequence
    if( nextFib > testedNumber )
        return false;//if we have passed the tested number, it's not in the sequence
    else if( nextFib == testedNumber )
        return true;//if we have a perfect match, the tested number is in the sequence
    else
        isFibonacci( testedNumber, b, nextFib );//otherwise, get the next fibonacci number and repeat.
}

使用它就像isFibonacci(the_number_you_want_to_test);

请注意,斐波那契数可以在O(log n)时间内计算,例如在这个SO问题中所述。

 类似资料:
  • 问题内容: 我在大学为我的Programming II类编写的程序需要一些帮助。这个问题要求人们使用递归来计算斐波那契数列。必须将计算出的斐波那契数存储在一个数组中,以停止不必要的重复计算并减少计算时间。 我设法使程序在没有数组和存储的情况下运行,现在我试图实现该功能,但遇到了麻烦。我不确定如何组织它。我已经浏览了Google并浏览了一些书,但没有太多帮助我解决如何实施解决方案的方法。 上面是不正

  • 本文向大家介绍检查数字是否为斐波那契数字或JavaScript,包括了检查数字是否为斐波那契数字或JavaScript的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数接受一个数字并根据斐波那契数列是否包含该事实返回一个布尔值。 例如- 如果函数调用是这样的- 那么输出应该是- 现在,让我们为这个问题写一个递归解决方案- 示例 输出结果 控制台中的输出将为-

  • 问题内容: 请解释以下简单代码: 我对最后一行感到困惑,特别是因为例如,如果n = 5,则将调用fibonacci(4)+ fibonacci(3),依此类推,但我不理解该算法如何以此来计算索引5的值方法。请详细解释! 问题答案: 在斐波那契数列中,每一项都是前两项的总和。因此,你编写了一个递归算法。 所以, 现在你已经知道了。因此,你可以随后计算其他值。 现在, 从斐波那契数列中我们可以看到斐波

  • 我试图想出一个程序,从用户那里获取任何数字,并生成斐波那契码的第n个数字。当我完成工作时,它会显示下一个,而不是我需要的。例如,我正在寻找第11个#和它的生产233而不是144。这是我的代码:

  • 本文向大家介绍Java递归实现斐波那契数列,包括了Java递归实现斐波那契数列的使用技巧和注意事项,需要的朋友参考一下 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所

  • Python3 实例 以下代码使用递归的方式来生成斐波那契数列: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com def recur_fibo(n): """递归函数 输出斐波那契数列""" if n <= 1: return n else: return(recur_fibo(n-1) + recur_fibo(n