2016-07-06 29 views
-5

ベースケースがない場合、再帰実行後のステートメントはいつ実行されますか?すべての再帰は再帰関数に戻す制御を送信する場合再帰関数のベースcaseとステートメントを持たない再帰

   void fun(int x,int y){ 
       statement 1; 
       statement 2; 
       fun(x',y'); 
       statement 3; 
       statement 4; 
       } 

は、ここでのステ​​ートメント1と2は、基地cases.Whenは文3と4が実行されますされていませんか?

私の質問はこのコードを参照していますhttps://ideone.com/lEKxW5。私が与えたリンクでは、24行目以降のステートメント、または再帰実行後のステートメントはいつですか?

   LOOK AT THE LINK OF THE CODE BEFORE ANSWERING . 


       void dfsBipartiteColor(int x, int y, int c) 
       { 
       // If we got to paint the cell: 
        if ((board[x][y] == 'X') && (color[x][y] == -1)) { 
        // Color it: 
        color[x][y] = c; 
        // Special case: We have foudn that there is at least one X: 
    result = std::max(result, 1); 

    // Try the adjacent hexagons: 
    for (int nx = max(0, x-1); nx <= min(n-1, x+1); nx++) { 
     for (int ny = max(0, y-1); ny <= min(n-1, y+1); ny++) { 
      // The hexagon is adjacent and has an X: 
      if ((nx - x != ny - y) && (board[nx][ny] == 'X')) { 
       // continue the DFS, negate the color: 
       dfsBipartiteColor(nx,ny, !c);// 
       // Special case: We now know there are two adjacent X: 
       result = std::max(result, 2); 
       // If the color is not consistent, the graph is not bipartite: 
       if (color[nx][ny] == c) { 
        result = 3; 
       } 
      } 
     } 
    } 
} 

上記のコードで再帰実行後のステートメントはいつですか?

+2

コードをステップ実行してその動作を確認してみませんか?それははるかに啓発的であり、学ぶ良いスキルです。 – NathanOliver

+0

はい私はコード上でそれを行いましたが、再帰実行後のステートメントがあるか、または順番がわからない場合 – mathematicalerdos

+2

いいえ、コードをステップ実行しませんでした。もしあなたがそれをしたら、実行されるものと実行されるものが正確に表示されます。 – NathanOliver

答えて

0

これらは決して実行されず、プログラムは無限再帰のためにスタック領域を使い果たすとすぐにかなり早くクラッシュします。あなたが条件もあり、あまりにも多くのコードを簡素化している

+0

文1/2には復帰があります。 – user463035818

+1

文が何であるかわからないときは、どうすればいいですか?それらのうちの1つが再帰を中断するifステートメントの場合はどうなりますか? – NathanOliver

+0

私が言及したコードのリンクを見て – mathematicalerdos

3

:条件が満たされていない場合

void fun(int x,int y){ 
    statement 1; 
    statement 2; 
    if(condition) fun(x',y'); 
    statement 3; 
    statement 4; 
} 

ので、呼び出しが返されます。

+0

あなたは私が言及しているtheeリンクのコードを見ることで簡単にできます – mathematicalerdos

+0

'for'ループと' if'は再帰呼び出しの条件を作成します。 – alain

1

基本条件は何もしないので見えないように見えますが、条件条件が偽の場合に発生します。

void function() 
{ 
    if (condition) 
    { 
     function(); 
     statement; 
    } 
} 

それでも同等

を検討し、基本ケースを見ることができない場合は、次の
は、可能な限りあなたが投稿したコードを簡素化

(。あなたは簡略化されたエントリの条件を除外しました)

void function() 
{ 
    if (condition) 
    { 
     function(); 
     statement; 
    } 
    else 
    { 
     // Do nothing. 
    } 
}