2017-09-17 14 views
-1

私は再帰関数を持っています。終了時を知る必要があるので、最新の結果を返すことができます。再帰関数の結果を返します

let called resultsが大きくなります。

成長が終了した後にのみ返す必要があります。

+0

すべての再帰の反復後の最終製品は、最終的な結果になります...値を渡して自分自身を呼び出して値を返すか、一定の条件の下でなければなりません。 – AngularM

+0

私はそれを本当に確信していませんか?それはすでに完了したときに戻っていないのですか?実際の戻り値を記録するのではなく、関数内にconsole.logがあります - > https://jsfiddle.net/adeneo/179ksdLa/1/ – adeneo

答えて

1
const target= 10; 
const list= [2, 5]; 
const zero = 0; 
let results = []; 

function test(amount, list, start, list) { 
    let next_results = []; 
    for (let i = start; i < collection.length; i++) { 
     let left = amount - collection[i]; 
     let currentList = list.slice(zero); 
     currentList.push(collection[i]); 

     if (left < zero) return []; 

     if (left === zero) { 
      next_results.push(list2); 
      results = results.concat(next_results); 
      return results; 
     } else { 
      let newr = test(left, list2, i, collection); 
      if (newr.length) { 
       next_results = next_results.concat(newr); 
      } 
     } 
    } 
    return results; 
} 

//Start point 
test(target, [], zero, list); 

結果:

[ { Combinations: [ 2, 2, 2, 2, 2 ] }, { Combinations: [ 5, 5 ] } ] 
+0

ありがとうございます。 コードは正常に動作します。問題は、関数が応答を返さないということだけです。完成したときに結果を返すために上記の関数が必要です。だから私は関数の単体テストを行うことができ、それは私に正しい結果を返します。 – AngularM

+0

'results'はそれらの関数の外で定義され、その値は保持されるので、これを持つ必要はありません。しかし、あなたが主張するなら、私はコードを修正してそれを返すことができます。 –

+0

はい、あなたはそれを変更できますか?ありがとうCS – AngularM

0

これが一般的な考え方です。再帰関数は、私も結果をもたらすために機能を必要とする

function recursive(v){ 
    if(condition) return recursive(v++); 
    else return v; 
} 

var n = recursive(1); 
関連する問題