Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:检查数字是否属于斐波那契序列(无循环)_Javascript_Fibonacci - Fatal编程技术网

Javascript JS:检查数字是否属于斐波那契序列(无循环)

Javascript JS:检查数字是否属于斐波那契序列(无循环),javascript,fibonacci,Javascript,Fibonacci,是否有一种有效的方法来检查数字是否属于斐波那契序列 我见过许多例子,其中有一个循环,它在数组中创建序列,并每次检查序列的新生成数是否等于输入数。还有别的办法吗 def is_squared(number): temp_root = math.sqrt(number); temp_root = int(temp_root); return (temp_root * temp_root == number); def check_all_fibo(test_number_list

是否有一种有效的方法来检查数字是否属于斐波那契序列

我见过许多例子,其中有一个循环,它在数组中创建序列,并每次检查序列的新生成数是否等于输入数。还有别的办法吗

def is_squared(number):
   temp_root = math.sqrt(number);
   temp_root = int(temp_root);
   return (temp_root * temp_root == number);

def check_all_fibo(test_number_list):
    result_fibo_list = [];
    for item in test_number_list:
        if item==0 or item == 1 or item == 2:
            result_fibo_list.append(item);
            continue;
        if is_squared(5 * item * item - 4) or is_squared(5 * item * item + 4):
            result_fibo_list.append(item);
    return result_fibo_list;
这是我的python实现。但请记住,该公式仅在fib不太大时有效。

该链接详细说明了斐波那契数的一个特殊性质,即当且仅当(5*n2+4)或(5*n2–4)中的一个或两个是完美正方形时,一个数就是斐波那契数

所以

那么isSquare将只是一个简单的检查函数

编辑:值得注意的是,虽然这是一种更有效、更容易找到斐波那契数的方法,但它确实有一个上限。大约在第70个斐波那契数及以上,您可能会看到问题,因为数字太大

函数isSquare(n){
function isSquare(n) {
    return n > 0 && Math.sqrt(n) % 1 === 0;
};

//Equation modified from http://www.geeksforgeeks.org/check-number-fibonacci-number/
function isFibonacci(numberToCheck)
{
    // numberToCheck is Fibinacci if one of 5*n*n + 4 or 5*n*n - 4 or both
    // is a perferct square
    return isPerfectSquare(5*numberToCheck*numberToCheck + 4) ||
           isPerfectSquare(5*numberToCheck*numberToCheck - 4);
}


for(var i = 0; i<= 10000; ++i) {
    console.log(i + " - " + isFibonacci(i));
}
返回n>0&&Math.sqrt(n)%1==0; }; //修正方程http://www.geeksforgeeks.org/check-number-fibonacci-number/ 函数为fibonacci(numberToCheck) { //如果5*n*n+4或5*n*n-4中的一个或两者都有,则numberToCheck为Fibinaci //这是一个完美的广场 返回isPerfectSquare(5*numberToCheck*numberToCheck+4)|| iPerfectSquare(5*numberToCheck*numberToCheck-4); }
对于(var i=0;iYou可以对上界进行指数搜索,然后将
f0
作为下界,对有效的斐波那契数进行二进制搜索。我不确定是否可能更快,请咨询数学家。
function isSquare(n) {
    return n > 0 && Math.sqrt(n) % 1 === 0;
};

//Equation modified from http://www.geeksforgeeks.org/check-number-fibonacci-number/
function isFibonacci(numberToCheck)
{
    // numberToCheck is Fibinacci if one of 5*n*n + 4 or 5*n*n - 4 or both
    // is a perferct square
    return isPerfectSquare(5*numberToCheck*numberToCheck + 4) ||
           isPerfectSquare(5*numberToCheck*numberToCheck - 4);
}


for(var i = 0; i<= 10000; ++i) {
    console.log(i + " - " + isFibonacci(i));
}