传统的方法是使用 Gessel 的测试。N是斐波那契数当且仅当5N 2 + 4或5N 2 – 4是平方数。这在这个 SO question和这个 SO question中进行了讨论。您也可以在此处找到示例,但此页面包含 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 question中所述。