2017-06-01 11 views
0

Javascriptで再帰関数を作成しようとしていますが、明らかに何かが見当たりません。 次の例では、ログにbaz = 18が表示されていますが、bazは未定義です。Javascriptを再帰的に使用すると返り値が返される

https://jsfiddle.net/n8fg1h3v/1/

任意のアイデア?

function foo(arr) { 
    if (arr[0]==7) { 
    return 18 
    } else { 
    arr = arr.slice(1,arr.length); 
    foo(arr); 
    } 
} 

var arr1 = [9,1,2,3,4,7,6]; 
var baz = foo(arr1); 
console.log(baz) 
+0

注意してください、あなたが(再割り当てを行うことができますが、 'ARR = ...' )あなたが望むところでは、Javascriptでそれはまれです再帰アルゴリズム内で式を引数として渡します( 'foo(arr.slice(...))) – ftor

答えて

3

機能の中でfooを呼び出す必要があります。

return foo(arr); 

function foo(arr) { 
 
    if (arr[0] == 7) { 
 
     return 18; 
 
    } else { 
 
     arr = arr.slice(1, arr.length); 
 
     return foo(arr); 
 
    } 
 
} 
 

 
var arr1 = [9, 1, 2, 3, 4, 7, 6]; 
 
var baz = foo(arr1); 
 
console.log(baz)

+0

すばやく、ありがとう! – luthien

+2

'7'が配列にない場合は、デフォルト値を使用しますか? –

+0

いいえ、これは、私が期待したように、 'if'の中に' return'を入れた 'if then else'文がなぜ動作しないのかを示し、理解しようとする単純な例に過ぎませんでした。あなたが提案した 'return foo(arr)'を追加することで、単純な例でも実際の問題でうまくいきます。ありがとう! (私は別の〜10分の答えを受け入れることができません、それの直後にします) – luthien

0

私はこれを行う単純になります。

function foo(arr) { 
 
    var el = arr.find(el => el === 7); 
 
    return el ? 18 : '7 was not found'; 
 
} 
 

 
var bar = foo([9, 1, 2, 3, 4, 7, 6]); 
 
console.log(bar); 
 

 
var baz = foo([9, 1, 2, 3, 4, 8, 6]); 
 
console.log(baz);

+0

繰り返しを壊すので、私は 'some'を使用しますが、それは再帰とは関係ありません。 –

+0

また、 'Array.prototype.find()'は反復処理を中断します。再帰についてのあなたのポイントを理解していますが、ここでは必要ではないと思います –

関連する問題