1

ループを使用せずにこのコードを関数に変更することは可能ですか?

$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;
}
4

4 に答える 4

3

レベル 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);
} 
于 2013-06-23T09:36:39.247 に答える
2

同じ結果を取得したい場合 (画面へのレベルの出力を含む)、次のコードを使用できます。

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);
} 
于 2013-06-23T11:00:55.603 に答える
0

または、単に $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...質問は私には明確ではありませんでした(私だけではありません) 、 そうみたいです) :)

于 2013-06-23T09:35:03.380 に答える