2017-11-17 6 views
0

私は再帰関数を書いています。ここではそのための擬似コードだ:再帰のreturn文を持つループ

public recFunction(Node node) { 
     for(int i=0; i<node.childCount(); i++){ 
      Node child = node.child(i); 
      if(child.satisfies condition) 
       return true; 
      else 
       return recFunction (child) 
     } 
     return false 
    } 

は今、ノードのような構造を有する:ここ

   a 
      /\ 
      b c 
      /\/\ 
      d e f g 

を、条件が唯一の「F」の場合に当てはまります。しかし、関数がdとeに移動してfalseを返すと、関数は "c"に移動することさえ気にしません。これの背後にある理由は何か。私は、特にリターン文を含むループを含むとき、再帰関数についてはいつも少しばかげていました。誰かがこのような場合に起こることを説明できますか?

+0

これは疑似コードではありません。 – Tom

答えて

4

あなたのforループは、すべてのノードの子を反復するように書かれていますが、常に最初の反復で戻ります。

if (child.satisfies condition) 
    return true; 
else 
    return recFunction (child); 

あなたは試合を取得するまで、すべての子どもたちに目を通すしたい場合、あなたはこの試みる場合があります:

if (child.satisfies condition) 
    return true; 
else if (recFunction(child)) 
    return true; 

以上単に

if (child.satisfies condition || recFunction(child)) 
    return true; 

をそれからそれはのために可能になりますforループを継続し、肯定的な結果が得られるまで他の子供を見る。