Php 为每层建筑生成资源

Php 为每层建筑生成资源,php,Php,是否可以在不使用循环的情况下将此代码更改为函数 $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; 对于($i=1;$i这里是没有“可见”循环的

是否可以在不使用循环的情况下将此代码更改为函数

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

对于($i=1;$i这里是没有“可见”循环的解决方案:

generate(80,10);
函数生成($start$level){
$i=1;//只是一个变量
$array=array_fill(0,$level,$start);//使用$level元素创建一个值为$start的数组
数组映射(函数($v)使用(&$i){//遍历数组并使用$i
echo“Level$i:”(array_产品(array$v,pow(1.5,$i++))。“
”;//一些基本的数学和输出 }美元阵列); }

请注意,您需要PHP5.3+,因为此函数使用的是匿名函数


这是一个没有“可见”循环的解决方案:

generate(80,10);
函数生成($start$level){
$i=1;//只是一个变量
$array=array_fill(0,$level,$start);//使用$level元素创建一个值为$start的数组
数组映射(函数($v)使用(&$i){//遍历数组并使用$i
echo“Level$i:”(array_产品(array$v,pow(1.5,$i++))。“
”;//一些基本的数学和输出 }美元阵列); }

请注意,您需要PHP5.3+,因为此函数使用的是匿名函数


或者,如果只需要输出$start:

function generate($start, $limit)

{

$start = $start * 1.5;  
echo $start."<br>";
if($limit>1)
return(generate($start,$limit-1));
}   
generate(80,10);
函数生成($start,$limit)
{
$start=$start*1.5;
echo$start。“
”; 如果($limit>1) 返回(生成($start$limit-1)); } 生成(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);
函数generate2($start、$limit、$base)
{
$start=$start*1.5;
回显“级别”。$base.:“$start.”
”; 如果($base1) { 返回(生成($start,$limit-1,$i)); } } 生成(80,10);
作为对我自己的回答。:)请测试它(在否决投票之前:),并让我知道有关问题。。。哦,我明白了-OP只想要一个结果,哈哈。。。
这个问题对我来说并不清楚(似乎不仅仅是我):

或者,如果您只需要输出$start:

function generate($start, $limit)

{

$start = $start * 1.5;  
echo $start."<br>";
if($limit>1)
return(generate($start,$limit-1));
}   
generate(80,10);
函数生成($start,$limit)
{
$start=$start*1.5;
echo$start。“
”; 如果($limit>1) 返回(生成($start$limit-1)); } 生成(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);
函数generate2($start、$limit、$base)
{
$start=$start*1.5;
回显“级别”。$base.:“$start.”
”; 如果($base1) { 返回(生成($start,$limit-1,$i)); } } 生成(80,10);
作为对我自己的回答。:)请测试它(在否决投票之前:),并让我知道有关问题。。。哦,我明白了-OP只想要一个结果,哈哈。。。 这个问题对我来说并不清楚(似乎不仅仅是我):

对于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,您有:

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

如果要获得相同的结果(包括打印到屏幕的级别),可以使用以下代码:

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);
}

因此,在通过
后,$start=80
$level=1
对于这个函数,你想让它返回
120
而不使用循环吗?是的,我想,但我不知道它是否可能,因为它只是简单的算术。你能给我一些例子吗?我知道这一定很简单,但我不知道。我可以给你一个提示:这就是你所需要的。所以在通过
$start=80
$level=1
对于这个函数,你想让它返回
120
而不使用循环吗?是的,我想,但我不知道它是否可能,因为它只是简单的算术。你能给我一些例子吗?我知道这一定很简单,但我不知道。我可以给你一个提示:这就是你所需要的。这是一个奇怪的递归模式。。当
$limit
达到0时返回什么?:-)@弗雷德里克,我,你测试过了吗?然而,我在第一个函数->显示的10个结果中做了一些编辑。。。(不是11,和以前一样:))不,我没有(我也不是投了反对票的人),但我确实认为
return
关键字应该在最后返回一些东西,在这个解决方案中不是这样的。每当
$limit
达到0时,您就会中断递归链,因此根本不返回任何内容。Nevermind:),OP实际上想要一些简单的东西(回显/返回一个值),但我没有意识到。我认为他希望在代码中的某个地方包含函数,并在需要时调用它——而不是生成数组(是的,函数只是回显值)……这是一种奇怪的递归模式。。当
$limit
达到0时返回什么?:-)@弗雷德里克,我,你测试过了吗?然而,我在第一个函数->显示的10个结果中做了一些编辑。。。(不是11,和以前一样:))不,我没有(我也不是投了反对票的人),但我确实认为
return
关键字应该在最后返回一些东西,在这个解决方案中不是这样的。每当
$limit
达到0时,您就会中断递归链,因此根本不返回任何内容。Nevermind:),OP实际上想要一些简单的东西(回显/返回一个值),但我没有意识到。我认为他希望在代码中的某个地方包含函数,并在需要时调用它——而不是生成数组(是的,函数只是回显值)……这是正确的答案,也从数学上简化为OP!这不是科尔