자바 스 크 립 트 출력 피 보 나치 수열 의 실현 방법
우리 가 풀 어야 할 문제 가 있다.
4.567917.피 보 나치 수열 의 10 번 째 항목,즉 1,1,2,3,5,8,13,21,34,55 를 시험 수출 한다.
분석 하 다.
어떤 사람들 은 제목 에'피 보 나치 수열'이라는 개념 이 나 오 는 것 을 보고 머리 가 뒤 집 혔 을 지도 모 르 지만 사실은 크게 필요 없다!
이 문제 에 대해 서 는 이 낯 선 개념 을 신경 쓰 지 않 고 뒤에 제 시 된 숫자 규칙 에 만 관심 을 가 져 야 한다.
우 리 는 규칙 적 으로 한 마디 로 정리 할 수 있다.세 번 째 부터 뒤의 모든 항목 의 값 은 앞의 두 항목 의 합 과 같 고 식 으로 표시 하면 an=an-1+an-2(n≥2)이다.
제목 의 요구 에 따라 사실은 우리 에 게 두 가지 일 을 하 라 는 것 이다.
4.567917.각 항목 의 값 을 생 성 합 니 다출력 모든 값 을 출력 합 니 다.
기초 해법
문제 풀이 방향:
4.567917.배열 의 각 값 을 저장 하 는 배열 을 만 듭 니 다
/**
* @description
* @param {number} n ( , )
*/
function createFibArr(n) {
//
let fibArr = [];
// ( 2) ,
for (let index = 0; index < n; index++) {
index < 2 ? fibArr.push(1) : fibArr.push(fibArr[index - 1] + fibArr[index - 2]);
console.log(fibArr[index]);
}
}
//
createFibArr(10);
분석:이것 은 아마도 가장 기본 적 인 문제 풀이 방법 일 것 이다.아주 쉽게 실 현 될 것 이다.
그러나 이것 이 면접 문제 라면 이런 답 은 격식 에 맞 고 빛 나 는 점 이 없다 고 할 수 있 습 니 다.가장 중요 한 것 은 우리 의 남 다른 기질 을 나타 내지 못 하 는 것 입 니 다.그래서 우 리 는 다른 수단 으로 자신의 강 요 를 향상 시 켜 야 합 니 다!
초급 귀속
문제 풀이 방향:
4.567917.재 귀 수단 을 통 해 각 위치 에 대응 하 는 값 을 계산한다인쇄 결과
코드 구현 은 다음 과 같 습 니 다.
/**
* @description n
* @param {number} n
* @returns {number} n
*/
function calFibValue(n) {
console.count(" :")
return n < 2 ? 1 : (calFibValue(n - 1) + calFibValue(n - 2));
}
/**
* @description
* @param {number} n
*/
function printRes(n) {
for (let index = 0; index < n; index++) {
console.log(calFibValue(index));
}
}
//
printRes(10);
// :: 276
분석:재 귀적 인 사용 은 확실히 코드 의 강요 격 을 향상 시 켰 으 나 또 다른 문 제 를 가 져 왔 다.성능 문제 이다.
모든 항목 의 값 은 첫 번 째 항목 부터 누적 한 것 이다.예 를 들 어 네 번 째 항목 의 값 을 계산 하 는데 그 과정 은 다음 과 같다.
다섯 번 째 항목 의 값 을 계산 할 때 위의 이 과정 을 거 쳐 네 번 째 항목 의 값 을 얻어 대량의 중복 연산 을 했다.
면접 관 을 놀 라 게 하기 위해 서 는 최적화 가 필요 합 니 다!
순환 최적화
문제 풀이 방향:
4.567917.중복 계산 을 초래 한 것 은 그 부분의 논리 이기 때문에 최적화 점 은 여기 로 돌아간다4.567917.중복 연산 이 존재 하 는 이상 뒤의 연산 은 앞에서 계산 한 값 을 충분히 사용 할 수 있 음 을 의미 하기 때문에 우 리 는 캐 시 를 도입 하여 매번 의 계산 결 과 를 저장 해 야 한다코드 구현:
/**
* @description n
* @param {number} n
* @returns {number} n
*/
// Map
// , Map
let fibValueMap = new Map();
function calFibValue(n) {
console.count(" :");
// ,
if (fibValueMap.has(n)) {
return fibValueMap.get(n);
}
const value = n < 2 ? 1 : (calFibValue(n - 1) + calFibValue(n - 2));
// , Map
fibValueMap.set(n, value);
return value;
}
/**
* @description
* @param {number} n
*/
function printRes(n) {
for (let index = 0; index < n; index++) {
console.log(calFibValue(index));
}
}
//
printRes(10);
// :: 26
분석:인쇄 된 count 를 보면 최 적 화 된 귀속 횟수 가 최 적 화 된 1/10 정도 인 데 이 결 과 는 매우 놀랍다.
이번 면접 관 마음 에 드 시 겠 죠?
총결산
모든 변 화 는 그 종 류 를 떠 나 지 않 고 문제 풀이 의 방향 을 정리 하기 만 하면 코드 실현 은 하나의 결과 일 뿐이다.일상적인 업무 학습 에서 우 리 는 의식 적 으로 자신의 발산 적 사 고 를 키 워 야 한다.여러 각도 에서 문 제 를 보면 다른 풍경 을 발견 할 수 있다!깨 우 침 이 있 었 으 면 좋 겠 습 니 다!
면접 에서 자신의 독특한 기질 을 돋 보이 게 하거나 남 의 면접 문 제 를 구체 적 으로 요구 하기 위해 우 리 는 커 보 이 는 사고방식 을 사용한다.이것 은 크게 나 무 랄 데 가 없다.
그러나 일반적인 업무 에서 저 는 여러분 에 게 더욱 건의 합 니 다.성능 이 비슷 한 상황 에서 기본 적 인 방법 으로 해결 할 수 있 는 것 은 보통'고급'방법 을 사용 하지 마 세 요.기본 적 인 방법 이 잘못 될 확률 이 많 지 않 기 때 문 입 니 다.예 를 들 어 오늘 이 문 제 는 사실 기초 해법 의 성능 이 가장 좋다.
버그 를 적 게 써 야 우 리 는 물고 기 를 만 질 시간 이 더 많 지 않 습 니까?
자 바스 크 립 트 가 피 보 나치 수열 을 출력 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JS 출력 피 보 나치 수열 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.