2017-02-05 22 views
0

次の再帰的コードが「test」という単語をなぜ印刷しないのか、私に説明することができれば嬉しいです。前もって感謝します。Cコードの背後にあるロジックを理解する

void drawTetriminosEachPosition(int **tetriminos, char **dBoard, int **tBoard, int i){ 
    char c; 
    char **dBoard2; 

    if(tetriminos[i] == '\0') 
    { 
     return; 
    }  
    else 
    { 
    dBoard2 = dBoard; 
    DrawTetrimino(tBoard, tetriminos[i], dBoard, i+65); 
    } 
    i++; 
    return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 

    ft_putstr("test"); 
    if(checkChar(tBoard,tetriminos[i])) 
    { 
     dBoard = dBoard2; 
     return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 
    }  
} 
+2

問題ではない、なぜそれが ''「test」を印刷する必要がありますか?何も 'return'ステートメントの後に実行されません – UnholySheep

+0

私はまだ十分に再帰的な理解していないようだ、私は一度tetriminos [i] == '\ 0'それはdrawTetriminosEachPositionの前の呼び出しに戻りますと思ったその時点から続ける – Patratel

+0

しかし、あなたは戻ってきている!戻り値を削除します - ft_putstrの前に関数を呼び出してください。 – cdcdcd

答えて

2

リターン後のステートメントは実行されません。最初から

return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 

は、次のコードは実行されません。

+0

おかげで私は今それを修正する方法を知っていると思う – Patratel

1

コントロールがreturn ...に達すると、単に戻り、次の行は実行されません。間にいくつかのロジックが欠けていたかもしれませんか?

あなたはこの部分を削除することができます今のところ、それは

ft_putstr("test"); 
    if(checkChar(tBoard,tetriminos[i])) 
    { 
     dBoard = dBoard2; 
     return (drawTetriminosEachPosition(tetriminos,dBoard,tBoard,i)); 
    } 
+0

今私は私はそれが間違っていたどこを理解する、彼は最初だったので、コアラにこれを与えるつもり – Patratel

関連する問題