PHP 再帰アルゴリズム コード:
次のようにコードをコピーします:
< ?php
//PIの1分間の角度の値を定義するdefine("PII",M_PI/180);
// 新しい画像リソースを作成し、その背景を白、前景色を黒として定義します
$im=imagecreate(670,500);
$white=imagecolorallocate($im,0xFF,0xFF,0xFF);
$g=imagecolorallocate($im,0x00,0x00,0x00);
//以下のインスタンス化されたコードから、初期値$x、$y、$L、$aがそれぞれ300、500、100、270
に分割されていることがわかります
functiondrawLeaf($g,$x,$y,$L,$a)
{ $B=50; $s1=2;
if($L>$s1){
//葉の位置を計算します
$x2=$x+$L*cos($a*PII);
$y2=$y+$L*sin($a*PII);
$x2R=$x2+$L/$s2*cos(($a+$B)*PII);
$y2R=$y2+$L/$s2*sin(($a+$B)*PII);
$x2L=$x2+$L/$s2*cos(($a-$B)*PII);
$y2L=$y2+$L/$s2*sin(($a-$B)*PII);
//下の葉の位置を計算します
$x1=$x+$L/$s2*cos($a*PII);
$y1=$y+$L/$s2*sin($a*PII);
$x1L=$x1+$L/$s2*cos(($a-$B)*PII);
$y1L=$y1+$L/$s2*sin(($a-$B)*PII);
$x1R=$x1+$L/$s2*cos(($a+$B)*PII);
$y1R=$y1+$L/$s2*sin(($a+$B)*PII);
//葉の主茎と葉面を分けて描画します
ImageLine($im,(int)$x,(int)$y,(int)$x2,(int)$y2,$g);
ImageLine($im,(int)$x2,(int)$y2,(int)$x2R,(int)$y2R,$g);
ImageLine($im,(int)$x2,(int)$y2,(int)$x2L,(int)$y2L,$g);
ImageLine($im,(int)$x1,(int)$y1,(int)$x1L,(int)$y1L,$g);
ImageLine($im,(int)$x1,(int)$y1,(int)$x1R,(int)$y1R,$g);
//自分自身を再帰的に呼び出します
drawLeaf($g,$x2,$y2,$L/$s3,$a+$C);
drawLeaf($g,$x2R,$y2R,$L/$s2,$a+$B);
drawLeaf($g,$x2L,$y2L,$L/$s2,$a-$B);
drawLeaf($g,$x1L,$y1L,$L/$s2,$a-$B);
drawLeaf($g,$x1R,$y1R,$L/$s2,$a+$B);
}
}
//インスタンス化
drawLeaf($g,300,500,100,270);
header("コンテンツタイプ:画像/png");
imagepng($im);
?>
私の個人的な PHP プログラミングの経験では、再帰呼び出しは静的変数でよく使用されます。静的変数の意味については、PHP マニュアルを参照してください。次のコードが PHP の再帰アルゴリズムと静的変数を理解するのにさらに役立つことを願っています
次のようにコードをコピーします:
header("コンテンツタイプ:text/plain"); functionstatic_function()
{
static$i=0;
if($i++
{
echo$i."n";
static_function();
}
}
static_function();
この PHP 再帰アルゴリズム コードは 1 から 10 までの数値を出力します。 static_function 関数を 2 回目に実行すると、変数 i は静的変数であるため解放されずに保持され、自動インクリメントされた値が取得されます。