[アルゴリズム]フィボナッチ(fibonacci)

6703 ワード

質問する
次の定義のフィボナッチ数列のn番目の項目を返さなければなりません.

  • 0番目のフィボナッチ数は0で、1番目のフィボナッチ数は1です.次に、2番目のフィボナッチ数から、前の2つのフィボナッチ数の和として定義される.

  • 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

  • 再帰関数を使用して実装する必要があります.

  • 繰り返し文の使用を禁止します(forwhile).
  • I/O例
    
    let output = fibonacci(0);
    console.log(output); // --> 0
    
    output = fibonacci(1);
    console.log(output); // --> 1
    
    output = fibonacci(5);
    console.log(output); // --> 5
    
    output = fibonacci(9);
    console.log(output); // --> 34
    
    
    ** Advanced
    
    피보나치 수열을 구하는 효율적인 알고리즘(`O(N)`)이 존재합니다. 재귀함수의 호출을 직접 관찰하여 비효율이 있는지 확인해 보시기 바랍니다.
    
    に答える
    前回のアルゴリズムハサミ石布で用いた再帰方式をこのアルゴリズムに適用し,実現した.
    再帰パラメータにcountを定義し、再帰のたびにアプリケーションから直ちに開始させ、再帰を実行します.
    
    function fibonacci(n) {
      // TODO: 여기에 코드를 작성합니다.
      let arr = [0, 1];
    
      const recursion = (count = 2) => {
        arr.push(arr[count-2] + arr[count-1]);
    
        if(count === n) {
          return;
        }
    
        recursion(count + 1);
      }
      
      if(n === 0) {
        return 0;
      }
      else if(n === 1) {
        return 1;
      }
      else {
        recursion();
        return arr[n];
      }
    }