자바 스 크 립 트 출력 피 보 나치 수열 의 실현 방법

제목.
우리 가 풀 어야 할 문제 가 있다.
4.567917.피 보 나치 수열 의 10 번 째 항목,즉 1,1,2,3,5,8,13,21,34,55 를 시험 수출 한다.
분석 하 다.
어떤 사람들 은 제목 에'피 보 나치 수열'이라는 개념 이 나 오 는 것 을 보고 머리 가 뒤 집 혔 을 지도 모 르 지만 사실은 크게 필요 없다!
이 문제 에 대해 서 는 이 낯 선 개념 을 신경 쓰 지 않 고 뒤에 제 시 된 숫자 규칙 에 만 관심 을 가 져 야 한다.
우 리 는 규칙 적 으로 한 마디 로 정리 할 수 있다.세 번 째 부터 뒤의 모든 항목 의 값 은 앞의 두 항목 의 합 과 같 고 식 으로 표시 하면 an=an-1+an-2(n≥2)이다.
제목 의 요구 에 따라 사실은 우리 에 게 두 가지 일 을 하 라 는 것 이다.
4.567917.각 항목 의 값 을 생 성 합 니 다출력 모든 값 을 출력 합 니 다.
기초 해법
문제 풀이 방향:
4.567917.배열 의 각 값 을 저장 하 는 배열 을 만 듭 니 다
  • for 순환 으로 수열 의 각 항목 을 생 성하 고 배열 에 저장 합 니 다(뒤의 각 항목 의 값 을 계산 하기 위해).생 성 된 항목 을 인쇄 합 니 다.
  • 코드 구현 은 다음 과 같 습 니 다.
    
    /**
     * @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
    
    
    분석:
    재 귀적 인 사용 은 확실히 코드 의 강요 격 을 향상 시 켰 으 나 또 다른 문 제 를 가 져 왔 다.성능 문제 이다.
    모든 항목 의 값 은 첫 번 째 항목 부터 누적 한 것 이다.예 를 들 어 네 번 째 항목 의 값 을 계산 하 는데 그 과정 은 다음 과 같다.
  • 첫 번 째 항목 의 값 을 되 돌려 줍 니 다:1..
  • 두 번 째 항목 의 값 을 되 돌려 줍 니 다:1..
  • 세 번 째 항목 의 값 을 계산 하면 1+1=2 이다4 번 째 항목 의 값 을 계산 하면 2+1=3 이다.
    다섯 번 째 항목 의 값 을 계산 할 때 위의 이 과정 을 거 쳐 네 번 째 항목 의 값 을 얻어 대량의 중복 연산 을 했다.
    면접 관 을 놀 라 게 하기 위해 서 는 최적화 가 필요 합 니 다!
    순환 최적화
    문제 풀이 방향:
    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 출력 피 보 나치 수열 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기