Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit33df079

Browse files
authored
Added negatives support to every fn
1 parentea39661 commit33df079

File tree

1 file changed

+41
-17
lines changed

1 file changed

+41
-17
lines changed

‎Maths/Fibonacci.js

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
constlist=[]
2-
2+
// https://en.wikipedia.org/wiki/Generalizations_of_Fibonacci_numbers#Extension_to_negative_integers
33
constFibonacciIterative=(nth)=>{
4-
constsequence=[]
4+
constsign=nth<0
5+
if(sign)n=-n
6+
constsequence=[0]
57

68
if(nth>=1)sequence.push(1)
7-
if(nth>=2)sequence.push(1)
9+
if(nth>=2)sequence.push(sign ?-1 :1)
810

911
for(leti=2;i<nth;i++){
10-
sequence.push(sequence[i-1]+sequence[i-2])
12+
sequence.push(
13+
sign ?
14+
sequence[i-2]-sequence[i-1]
15+
:
16+
sequence[i-1]+sequence[i-2]
17+
)
1118
}
1219

1320
returnsequence
@@ -17,15 +24,21 @@ const FibonacciRecursive = (number) => {
1724
return(()=>{
1825
switch(list.length){
1926
case0:
20-
list.push(1)
27+
list.push(0)
2128
returnFibonacciRecursive(number)
2229
case1:
2330
list.push(1)
2431
returnFibonacciRecursive(number)
2532
casenumber:
2633
returnlist
2734
default:
28-
list.push(list[list.length-1]+list[list.length-2])
35+
constsign=number<0
36+
list.push(
37+
sign ?
38+
list.at(-2)-list.at(-1)
39+
:
40+
list.at(-1)+list.at(-2)
41+
)
2942
returnFibonacciRecursive(number)
3043
}
3144
})()
@@ -34,14 +47,18 @@ const FibonacciRecursive = (number) => {
3447
constdict=newMap()
3548

3649
constFibonacciRecursiveDP=(stairs)=>{
37-
if(stairs<=0)return0
50+
constsign=stairs<0
51+
if(sign)stairs*=-1
52+
53+
if(stairs===0)return0
3854
if(stairs===1)return1
3955

4056
// Memoize stair count
4157
if(dict.has(stairs))returndict.get(stairs)
4258

43-
constres=
44-
FibonacciRecursiveDP(stairs-1)+FibonacciRecursiveDP(stairs-2)
59+
constres=sign
60+
?FibonacciRecursiveDP(stairs-2)-FibonacciRecursiveDP(stairs-1)
61+
:FibonacciRecursiveDP(stairs-1)+FibonacciRecursiveDP(stairs-2)
4562

4663
dict.set(stairs,res)
4764

@@ -60,11 +77,18 @@ const FibonacciRecursiveDP = (stairs) => {
6077
//@Satzyakiz
6178

6279
constFibonacciDpWithoutRecursion=(number)=>{
63-
consttable=[]
64-
table.push(1)
80+
constsgn=number<0
81+
if(sgn)number*=-1
82+
consttable=[0]
6583
table.push(1)
84+
table.push(sgn ?-1 :1)
6685
for(leti=2;i<number;++i){
67-
table.push(table[i-1]+table[i-2])
86+
table.push(
87+
sgn ?
88+
table[i-2]-table[i-1]
89+
:
90+
table[i-1]+table[i-2]
91+
)
6892
}
6993
returntable
7094
}
@@ -75,10 +99,11 @@ const copyMatrix = (A) => {
7599
returnA.map(row=>row.map(cell=>cell))
76100
}
77101

78-
// the 2nd param is to generate a "BigInt-safe" matrix
79-
constIdentity=(size,bigint)=>{
80-
constZERO=bigint ?0n :0
81-
constONE=bigint ?1n :1
102+
constIdentity=(size)=>{
103+
constisBigInt=typeofsize==='bigint'
104+
constZERO=isBigInt ?0n :0
105+
constONE=isBigInt ?1n :1
106+
size=Number(size)
82107
constI=Array(size).fill(null).map(()=>Array(size).fill())
83108
returnI.map((row,rowIdx)=>row.map((_col,colIdx)=>{
84109
returnrowIdx===colIdx ?ONE :ZERO
@@ -164,7 +189,6 @@ const FibonacciMatrixExpo = (n) => {
164189
[ZERO]
165190
]
166191
F=matrixMultiply(poweredA,F)
167-
// https://en.wikipedia.org/wiki/Generalizations_of_Fibonacci_numbers#Extension_to_negative_integers
168192
returnF[0][0]*(sign ?(-ONE)**(n+ONE) :ONE)
169193
}
170194

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp