是否可以在不使用循环的情况下将此代码更改为函数?
$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;
}
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
答案 2 :(得分:0)
在这里,一个没有“可见”循环的解决方案:
generate(80,10);
function generate($start, $level){
$i=1; // Just a var
$array = array_fill(0, $level, $start); // create an array with $level elements, with value $start
array_map(function($v)use(&$i){ // Loop through the array and use $i
echo "Level $i: ".(array_product(array($v, pow(1.5, $i++))))."<br>"; // Some basic math and output
}, $array);
}
请注意,您需要 PHP 5.3 + ,因为此函数使用的是匿名函数
答案 3 :(得分:0)
或者,如果您只需要输出$ start:
function generate($start, $limit)
{
$start = $start * 1.5;
echo $start."<br>";
if($limit>1)
return(generate($start,$limit-1));
}
generate(80,10);
我的问题 - 如何正确回显$ level,没有第三个参数(0,在这种情况下应该增加,不减少:))? :)
编辑:我想知道更好的解决方案,它将使用两个参数: 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个结果,哈哈... 我不清楚问题(而且不仅仅是对我而言):)