マインスイーパ-再帰でどうしても

うまくいかなくて鼻血が出そうです。
再帰、というのはつまりユーザー定義関数の中で自分自身を呼び出す、っていう考え方のものですね?!(今頃気づいた)
で、試みるもエラー、エラー…
考え方はわかったものの、メモリが足りないとかで毎度エラーが出てしまいます。
たぶん無限ループ状態に陥っているんだと。
しかし、なんで無限ループになってしまうんだ。

<?php
//配列$board[$x][$y]['mine']に爆弾情報、$board[$x][$y]['open']にめくったか否かのフラグ
//$board[$x][$y]['mine']が0だった時この関数を呼び出してます

function turn_panel($x, $y){
    global $board;
    for( $i=-1; $i<=1; $i++ ){
    for( $j=-1; $j<=1; $j++ ){
        if($board[$x+$i][$y+$j]['mine'] != '*'){
        $board[$x+$i][$y+$j]['open']=true;
            if($board[$x+$i][$y+$j]['mine'] == 0){               
             turn_panel( $x+$i, $y+$j );
    }
            }
                      }
}
}
?>

たぶん、アホで危険な事してるんだろなー…って。
ちなみに上の関数でturn_panel( $x+$i, $y+$j );の行がないと、空白のマスのまわり八方がパカッと開くようにはなっているんですけど…
それじゃ意味ねえ…
うーんうーん。