2017-09-11 5 views
0

없이 피보나치 수를 생성 :의사/예로서 ES5를 사용하는 루프/재귀

var gr = 1.61803398875; 
function fib(v) { // fib without recursion 
    if(v < 2) return v; 
    return Math.round(((v-2) + (v-1)) * gr); 
} 

function fibr(v) { // fib with recursion 
     if(v < 2) return v; 
    return fibr(v-2) + fibr(v-1); 
} 

console.clear(); 
console.log(fib(0), fibr(0)); // 0 0 
console.log(fib(1), fibr(1)); // 1 1 
console.log(fib(2), fibr(2)); // 2 1 
console.log(fib(3), fibr(3)); // 5 2 
console.log(fib(4), fibr(4)); // 8 3 
console.log(fib(5), fibr(5)); // 11 5 
console.log(fib(6), fibr(6)); // 15 8 
console.log(fib(7), fibr(7)); // 18 13 
console.log(fib(8), fibr(8)); // 21 21 
console.log(fib(9), fibr(9)); // 24 34 

가 어떻게 반복/재귀의 어떤 종류없이 피보나치 수를 계산 할 수 있습니까?

답변

2

이 질문을 쓰는 동안 나는 새로운 아이디어를 얻었으므로 추가 연구를했는데 많은 시간이 걸립니다.

제가 발견은 FN = (φn - (-φ) -N)

this answer which has the math for a fibonacci number without recursion

/√5, φ = (1 +가 √5)/2 ≈ 1.6180339887

로 변환 ES5 그것은 다음과 같습니다

var gr = 1.61803398875; 
function fib(v) { // fib without recursion 
    if(v < 2) return v; 
    // return Math.round(((v-2) + (v-1)) * gr); 
    return Math.floor((Math.pow(gr, v) - (-gr))/Math.sqrt(5)); 
} 

그리고 짧은 ES6을 그것을

을 원하는 사람들