関数が返さundefined
れ、JavaScriptの単純なバイナリ検索コードです。console.log()
関数で確認したところ、実際に機能しています。以下は私のソースコードです:
var array=[1,2,3,2,4,5,6,8,7,8,9];
var searching= 3;
var starting = 0;
var ending = array.length-1;
var result = binarysearch(array,searching,starting,ending);
console.log(result); // throws undefined
function binarysearch(data,target,start,end){
var mediane = Math.round((start+end)/2);
if (data[mediane] == target) return mediane; // console.log(mediane) gives 2
if (data[mediane] > target) binarysearch(data,target,start,mediane-1);
if (data[mediane] < target) binarysearch(data,target,mediane+1,end);
とてもシンプルです。return
コールスタックを追跡するために使用します。
var array=[1,2,3,2,4,5,6,8,7,8,9];
var searching= 3;
var starting = 0;
var ending = array.length-1;
var result = binarysearch(array,searching,starting,ending);
console.log(result); // throws undefined
function binarysearch(data,target,start,end){
var mediane = Math.round((start+end)/2);
if(data[mediane] == target) return mediane; // console.log(mediane) gives 2
if ( data[mediane] > target) return binarysearch(data,target,start,mediane-1);
if ( data[mediane] < target) return binarysearch(data,target,mediane+1,end);
}
説明:
再帰呼び出しを使用すると、制御は1つの関数ブランチから別の関数ブランチに移動します。明確な値を返すには、コントロール(関数コンテキスト、またはプログラムの実行が現在どこにあるかを知っているもの)を渡す必要があります。あなたは再帰的なブランチを返していませんでした。これは、実行スタックが新しい関数を作成していて、出力を取得していなかったため、それを別個のブランチとして扱っていたことを意味します。
を実行するreturn
と、コンテキストは、関数を分岐して最終的な戻り値(この場合は)を使用する必要があることを認識し2
ます。これがお役に立てば幸いです。:)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加