JS再帰関数


さいきかんすう
ある問題を解決する際に、構造が同じで小さい場合を解決することによってその問題を解決する方法を再帰(recursion)と呼ぶ.
再帰関数とは、呼び出し関数自体を指します.
function foo(){
  foo();
}  
再帰関数の使用に適しています
  • 与えられた問題(構造が類似している)がより小さな問題に分けることができる場合、
  • .
  • オーバーラップループが多数あるか、オーバーラップの度合い(ループ数)が予知できない場合、
  • .
    再帰関数の一般的な形式
    function recursive(input1, input2, ...) {
      // 재귀의 기초 (base case)
      if (문제를 더 이상 쪼갤 수 없을 경우) {
        return 단순한 문제의 해답;
      }
      // recursive Case
      // 그렇지 않은 경우
      return 더 작은 문제로 새롭게 정의된 문제
      // 예1. someValue + recursive(input1Changed, input2Changed, ...)
      // 예2. someValue * recursive(input1Changed, input2Changed, ...)
    }
    複文
    再帰は基本的に重複文であり、すべての再帰は重複文で表すことができる.
    // 재귀
    function factiorial(n) {
      if (n === 0) {
        return 1;
      }  
      return n * factiorial(n - 1);
    }  
      
     // 반복문
    function factiorial(n) {
      let result = 1;
      for (let i = n; i > 0; i--) {
        result = result * i;
      }
      return result;
    }  
    家に帰る条件
    再帰には無限の重複を防ぐための脱出条件が必要である.
    function factorial(n) {
      // Base Case
      // n이 0이면 재귀를 더 이상 진행하지 않음
      if (n === 0) {
        return 1;
      }
      
      // Recursive Case
      return n * factorial(n - 1);
    }  
    再帰的な利点と欠点
  • の利点:アルゴリズムが再帰的であれば、プログラムの可読性が良い
    欠点:呼び出すたびに値を返す前に新しい呼び出しスタックが作成され、メモリが
  • 大量に消費されます.
    再帰使用例
  • 箱1:フィボナッチ数列
  • ケース2:ブラウズツリー構造-JSON,DOM Tree
  • JSON(JavaScript Object Notation)
    データ交換用フォーマット
    JSON例
    const message = {
      sender: "김코딩",
      receiver: "나해커",
      message: "해커야 알고리즘 풀기 대결할래?",
      createdAt: "2021-08-02 19:08:02"
    }
    JSONオブジェクトを文字列に変換します.
    let transferableMessage = JSON.stringify(message);
    console.log(transferableMessage);
    // `{"sender":"김코딩","receiver":"나해커","message":"해커야 알고리즘 풀기 대결할래?","createdAt":"2021-08-02 19:08:02"}`
    JSON.stringify()関数を使用してシーケンス化
    文字列をJSONオブジェクトに変換します.
    let packet = `{"sender":"김코딩","receiver":"나해커","message":"해커야 알고리즘 풀기 대결할래?","createdAt":"2021-08-02 19:08:02"}`;
    
    let obj = JSON.parse(packet)
    console.log(obj)
    /*
    {
      sender: "김코딩",
      receiver: "나해커",
      message: "해커야 알고리즘 풀기 대결할래?",
      createdAt: "2021-08-02 19:08:02"
    }
    */
    JSON.stringify()とは逆のJSON.parse()関数を使用して逆シーケンス化
    JSONルール(対象との差異)
    JavaScriptオブジェクトJSONキーは引用符なしで、二重引用符を付けなければなりません.文字列値の文字列値は任意の形式の引用符とすることができます.二重引用符で囲まなければなりませんJSONキーと値の間、およびキー値のペアの間にスペースを付けることはできません.