JavaScript再帰関数
概要:このチュートリアルでは、再帰技術を使用して、自分自身を呼び出す関数であるJavaScript再帰関数を開発する方
JavaScriptの再帰関数の紹介
再帰関数は、それがしないまで自分自身を呼び出す関数です。p>
という関数があるとしますrecurse()
recurse()
は、次のように、本体内で自分自身を呼び出す場合、再帰関数です。
Code language: JavaScript (javascript)function recurse() { // ... recurse(); // ...}
再帰関数には、常に自分自身の呼び出しを停止 したがって、再帰関数は通常、次のようになります。
Code language: JavaScript (javascript)function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
一般に、再帰関数は大きな問題を小さな問題に分解するために使用され バイナリツリーやグラフなどのデータ構造や、バイナリ検索やクイックソートなどのアルゴリズムで頻繁に使用されていることがわかります。
JavaScript再帰関数の例
再帰関数を使用する例をいくつか見てみましょう。
1)単純なJavaScript再帰関数の例
指定された数から1までカウントダウンする関数を開発する必要があるとします。 たとえば、10から1にカウントダウンするには:
321
以下は、countDown()
関数を示しています。
Code language: JavaScript (javascript)function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
このcountDown(3)
数字3から1にカウントダウンするには、次のことができます。
- 数字3を表示します。
- そして、番号2を示す
countDown(2)
countDown(1)
を呼び出します。
次のように、countDown()
を再帰関数に変更します。
ThiscountDown(3)
は、呼び出しスタックサイズが次のように超過するまで実行されます。
Code language: JavaScript (javascript)Uncaught RangeError: Maximum call stack size exceeded.
…それ自身の呼び出しを停止する条件がないためです。
次の数値がゼロのときにカウントダウンが停止するため、if条件を次のように追加します。
出力:P>
321
countDown()
期待どおりに動作するようです。
ただし、関数型チュートリアルで説明したように、関数の名前は実際の関数オブジェクトへの参照です。コードのどこかで関数名がnullに設定されている場合、再帰関数は動作を停止します。たとえば、次のコードはエラーになります。
Code language: JavaScript (javascript)let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
エラー:
Code language: JavaScript (javascript)Uncaught TypeError: countDown is not a function
スクリプトの動作方法:まず、変数にcountDown
newYearCountDown
countDown
null
に設定します。
newYearCountDown
関数を呼び出します。コードは、countDown()
countDown
null
に設定されているため、エラーが発生します。これを修正するには、次のように名前付き関数式を使用できます:
2)数字の桁の合計を計算する例
たとえば、324などの数字が与えられた場合、数字の合計を計算します3 + 2 + 4 =9
再帰的な手法を適用するには、次の手順を使用できます。
f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)
So
f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3
以下は、sumOfDigits()
再帰関数を示しています。
どのように動作しますか:
概要sumOfDigits()
再帰関数:
それはどのように動作しますか:
概要
f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3
f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3
以下は、sumOfDigits()
h2>
- 再帰関数は、それがないまで自分自身を呼び出す関数です
- 再帰関数は、常に関数が自分自身を呼び出すのを停止する条件を持っています。
- このチュートリアルは役に立ちましたか?
div