ループを使用せずにこのコードを関数に変更することは可能ですか?
$start = 80;
for ($i = 1; $i <= 10; $i++) {
$start = $start * 1.5;
echo "level ".$i.": ".$start."<br>";
}
function generate($start, $level){
// some code
return $start;
}
ループを使用せずにこのコードを関数に変更することは可能ですか?
$start = 80;
for ($i = 1; $i <= 10; $i++) {
$start = $start * 1.5;
echo "level ".$i.": ".$start."<br>";
}
function generate($start, $level){
// some code
return $start;
}
レベル 1 の場合:
$start = $start * 1.5;
レベル 2$start
はレベル 1 の結果であるため、次のようになります。
$start = ($start * 1.5) * 1.5;
これと同じ
$start = $start * 1.5 * 1.5;
そして、次のように簡略化できます
$start = $start * pow(1.5, $level);
最終的に、関数は次のようになります。
function generate($start, $level){
return $start * pow(1.5, $level);
}
同じ結果を取得したい場合 (画面へのレベルの出力を含む)、次のコードを使用できます。
function generate2($start, $from,$to){
if($from==$to+1)
return 1.5;
$tmp=$start*1.5;
echo "level ". ($from).": ".$tmp."<br>";
return 1.5*generate2($tmp,$from+1,$to);
}
またはこれ:
<?php
define ("MAX_LEVEL",10) ;
function generate($start, $level)
{
if($limit==0)
return 1.5;
$tmp=$start*1.5;
echo "level ". (MAX_LEVEL-$level+1).": ".$tmp."<br>";
return 1.5*generate($tmp,$level-1);
}
ここにいくつかのチェックコードがあります:
$start = 80;//<=================your code
for ($i = 1; $i <= 10; $i++) {
$start = $start * 1.5;
echo "level ".$i.": ".$start."<br>";
}
echo"---------------------------- <br>";
generate(80,10);//<====================my code
echo"---------------------------- <br>";
generate2(80,1,10);
?>
プリントが必要ない場合は、非常に単純な関数を使用できます。
function generate($start, $level){
return $start * pow(1.5, $level);
}
または、単に $start を出力する必要がある場合:
function generate($start, $limit)
{
$start = $start * 1.5;
echo $start."<br>";
if($limit>1)
return(generate($start,$limit-1));
}
generate(80,10);
私の質問 - 3 番目のパラメータ (0、この場合は増分、減分なし:)) なしで $level を適切にエコーする方法は? :)
編集:2つの引数を使用して、同じことを行うより良い解決策を知りたい:
function generate2($start, $limit,$base)
{
$start = $start * 1.5;
echo "level ".$base.": ".$start."<br>";
if($base<$limit)
return(generate2($start,$limit,$base+1));
}
generate2(80,10,1);
そして最終編集:
function generate($start, $limit,$i=0)
{
$i++;
$start = $start * 1.5;
echo "level ".$i.": ".$start."<br>";
if($limit>1)
{
return(generate($start,$limit-1,$i));
}
}
generate(80,10);
自分への答えとして。:)それをテストしてください(反対票の前に:))、問題について教えてください...ああ、わかりました-OPは1つの結果だけを望んでいます、LOL...質問は私には明確ではありませんでした(私だけではありません) 、 そうみたいです) :)