JS)再帰関数


さいきかんすう


1.再帰関数


1.1再帰関数の特性
1.2再帰関数の使用例

1.再帰関数


復帰とは?[ある関数が自分を呼び出す]


  • 資料構造では、ツリー構造で再帰関数が使用される.
  • は文系とwhile文系でも可能であるが,再帰関数で解く必要があるアルゴリズムがある.
  • 1.1再帰関数の特性


    特長
    1.終了条件:終了条件は、望ましくない値を受け取ったときに再び戻ることを防止します.
    2.基本条件(Base case):if文の内部で再帰関数に使用されます.基本条件を満たすために再帰関数を構成しましょう
    3.再帰:基本条件に達するまで関数を再帰します.
  • 再帰関数はいつ使えばいいですか?
  • で与えられた問題を類似構造のより小さな問題に分ける場合、
  • .
  • のオーバーラップ回数(複数列)
  • を予測することが難しい場合
    arr = [1,2,3,4,5,6]
    上に並べられたアイテムを1つずつ加算する関数を作成します.
    もちろん、初めて会った瞬間、私はまずfor Moonを思い出します.
    function Sumarr(arr) {
      let sum = 0;
      for (let i = 0; i < arr.length; i++) {
        sum += arr[i];
      }
      return sum;
    }
    以上の関数は完全に可能です.しかし、私たちは別の角度からこの問題を見ています.
    1 + Sumarr([2,3,4,5]) // 1과 나머지 배열
    3 + Sumarr([3,4,5]) // 1+2와 나머지 배열
    6 + Sumarr([4,5]) //1+2+3과 나머지 배열
    10 + Sumarr([5]) //1+2+3+4과 나머지 배열
    15 + Sumarr([]) //1+2+3+4+5과 나머지 배열
    以上の例はコードで以下のように実現されている.
    function arrSum(arr) {
      if(arr.length === 0){return 0}
      // 예외로 빈배열이면 0을 출력한다.
      if(arr.length === 1){
        return arr[0]
      //재귀탈출문으로 배열 길이가 1이면 남은 1배열을 출력한다.
      }
      return arr[0] + arrSum(arr.slice(1))
     //재귀문으로 현재 입력된배열의 첫번째 행과 arrSum에 arr의 1번째 인덱스부터 기입하여 함수를 재귀한다.
    }

    絵より上
    最後に,再帰脱出関数のreturn値に逆数を加えた.
    これはもっと難しい概念ですが、これは簡単な問題で、再帰の役割を簡単に理解しましょう.

    1.2再帰関数の使用例


    再帰関数テンプレート
    function func(value) {
      if (문제를 더 이상 쪼갤 수 없을 경우) {
        return 단순한 문제의 해답;
      }
      // 그렇지 않은 경우
      return 더 작은 문제로 새롭게 정의된 문제
    }

    1.2.1


    1から始まる関数
    function Sumnum(num) {
      if(num === 0){
        return num 
     }
      return num + sumTo(num-1)
    }
    Ex) Sumnum(4)
    return ... 
    
    4 + Sumnum(3)
    return 3 + Sumnum(2)
    return     2 + Sumnum(1)
    return         1 + Snumnum(0)
                        return 0
    
    4 + 3 + 2 + 1 + 0 = 10
    

    1.2.2


    並べ替え順序の反転
    function rrA(arr) {
      if(arr.length===0){
        return []
      }
      head = arr.pop()
      tail = arr.slice(0,arr.length)
    
    return [head].concat(rrA(tail))
    }

  • arr.長さが0の場合、空の配列を返します.

  • headの配列の終了値を入力します.

  • tailではarrの0番目のインデックスから長さを記入します.

  • 一番前のheadをreturnの前に置き、concatを使用して後ろにtailを記入し、現在の関数を再バインドします.

  • 入力された配列の長さが0の場合、再帰出口を介して空の配列concatが出力され、最終的に反転した配列が出力されます.