在Javascript中,bin(n)[3::]:中的i的等价物是什么?
我正在研究一个返回大斐波那契数模的算法。我发现了一种快速、高效的算法,用于使用以下python确定值:在Javascript中,bin(n)[3::]:中的i的等价物是什么?,javascript,python,fibonacci,modulo,Javascript,Python,Fibonacci,Modulo,我正在研究一个返回大斐波那契数模的算法。我发现了一种快速、高效的算法,用于使用以下python确定值: def fib(n): v1, v2, v3 = 1, 1, 0 # initialise a matrix [[1,1],[1,0]] for rec in bin(n)[3:]: # perform fast exponentiation of the matrix (quickly raise it to the nth power) calc =
def fib(n):
v1, v2, v3 = 1, 1, 0 # initialise a matrix [[1,1],[1,0]]
for rec in bin(n)[3:]: # perform fast exponentiation of the matrix (quickly raise it to the nth power)
calc = v2*v2
v1, v2, v3 = v1*v1+calc, (v1+v3)*v2, calc+v3*v3
if rec == '1':
v1, v2, v3 = v1+v2, v1, v2
return v2
我很想了解如何在javascript中实现这一点,二进制转换行让我很头疼。
这里for循环使用每个整数的二进制转换,我假定从0到n,并将结果截断为3位。在循环体内部,还针对字符串表示形式1对“rec”进行相等性检查。有人能把它拆开吗?任何见解都值得赞赏。谢谢 这是JavaScript(ES6)的等价物:
函数fib(n){
让[v1,v2,v3]=[1,1,0];//初始化矩阵[[1,1],[1,0]]
对于(n.toString(2.slice(1))中的(i)){//执行矩阵的快速幂运算(快速将其提升到n次方)
设calc=v2*v2;
[v1,v2,v3]=[v1*v1+calc,(v1+v3)*v2,calc+v3*v3];
如果(i=='1')
[v1,v2,v3]=[v1+v2,v1,v2];
}
返回v2;
}
//演示
控制台日志(fib(15))代码>这是JavaScript(ES6)的等价物:
函数fib(n){
让[v1,v2,v3]=[1,1,0];//初始化矩阵[[1,1],[1,0]]
对于(n.toString(2.slice(1))中的(i)){//执行矩阵的快速幂运算(快速将其提升到n次方)
设calc=v2*v2;
[v1,v2,v3]=[v1*v1+calc,(v1+v3)*v2,calc+v3*v3];
如果(i=='1')
[v1,v2,v3]=[v1+v2,v1,v2];
}
返回v2;
}
//演示
控制台日志(fib(15))代码>如果它是正数,我认为它只是我的数字。tostring(2)
…如果它是正数,我认为它只是我的数字。tostring(2)
。。。。