再帰関数の理解を深める!
再帰関数への苦手意識
私、前々から再帰関数への苦手意識がありました。。。
(業務でもあまり使わないしなーと、ついつい理解を後回しにしていました。もごもご)
しかし競技プログラミングなんか見てみると頻出頻度が高いので、この際理解を深めようと思いました。
やりたい内容
▶︎0からnまで、以下のルールに則った総和であるresultを返す。
奇数の場合は、前の値を*2する。
偶数の場合は、前の値を+1する。
n=0の場合は、1を返す。
例)n:0〜6 ⇨ result:1, 2, 3, 6, 7, 14, 15
n=0の時result=1、n=1の時1*2でresult=2、
n=2の時2+1でresult=3、n=3の時3*2でresult=6、
n=4の時6+1でresult=7となる。
再帰関数を用いたパターン①と、理解を深める為にfor文で単純にループを回すパターン②と2つのパターンを書いてみました。
// ①再帰 let recursive = (n) => { if(n==0) return 1; return (n%2==1) ? recursive(n-1)*2 : recursive(n-1)+1; } (() => { const n = 5; console.log(recursive(n)); // 14 })();
// ②再帰使わない let recursive = (n) => { let result = 1; for (let i=0; i<=n; i++) { if (i==0) continue; if (i%2==1) result *= 2; if (i%2==0) result += 1; } return result; } (() => { const n = 5; console.log(recursive(n)); // 14 })();