n을 입력하고 피보나치수열의 n번째 항을 찾는다
function fibonacci(n) { if (n < 0) { throw new Error('输入的数字不能小于0'); } if (n == 0) { return 0; } if (n == 1) { return 1; } return fibonacci(n-1) + fibonacci(n-2); }
사실 별로 좋은 방법은 아니다
예를 들어 fibonacci(10)을 구하면 fibonacci(9)로 분해된다. 및 fibonacci(8)이 있지만 fibonacci(9)는 fibonacci(8)과 fibonacci(7)로 분해되며, 여기서 fibonacci(8)는 반복적으로 계산됩니다. 가장 간단한 방법은 다음과 같습니다. 계산된 값 기록:
function fibonacci2(n) { if (n < 0) throw new Error('输入的数字不能小于0'); let arr = [0, 1]; function calc(n) { if (n<2) { return arr[n]; } if (arr[n] != undefined) { return arr[n]; } let data = calc(n-1) + calc(n-2); arr[n] = data; return data; } return calc(n); } function fibonacciFunc() { let arr = [0, 1]; function calc(n) { if (n < 0) throw new Error('输入的数字不能小于0'); if (n<2) return arr[n]; if (arr[n] != undefined) { return arr[n]; } let data = calc(n-1) + calc(n-2); arr[n] = data; return data; } return calc; } let fibonacci3 = fibonacciFunc();
위의 두 가지 방법은 클로저를 사용합니다
fibonacci3의 단점은 fibonacci3이 해제되지 않는 한 arr 배열이 항상 존재한다는 것입니다. 메모리. 특히 상대적으로 큰 수를 계산한 후에는 fibonacci 수를 많이 계산해야 하는 경우 fibonacci3이 더 유리하지만 마지막에 fibonacci3을 해제해야 한다는 점을 기억하세요. 즉,
fibonacci3 = null;
다른 방법은 다음과 같습니다. 재귀를 사용하여
function fibonacci4 (n) { if (n < 0) throw new Error('输入的数字不能小于0'); let dataMinusTwo= 0, dataMinusOne = 1, data; if (n == 0) return dataMinusTwo; if (n == 1) return dataMinusOne; for (var i=2;i<=n;i++) { data = dataMinusOne + dataMinusTwo; dataMinusTwo = dataMinusOne; dataMinusOne = data; } return data; }
를 직접 반복합니다. 위 내용은 피보나치 수열을 구현하기 위한 js의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!