是否可以在不使用循环的情况下将此代码更改为函数?
$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);
我的问题 - 如何正确回显 $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 个结果,哈哈......问题对我来说并不清楚(不仅仅是对我来说) , 它似乎) :)
给你,一个没有“可见”循环的解决方案:
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+,因为此函数使用匿名函数