【问题标题】:Achieve nested for loops using recursion PHP使用递归 PHP 实现嵌套 for 循环
【发布时间】:2014-10-01 15:17:21
【问题描述】:
<?php

for( $t=0;$t<=9;$t++ ){
    for( $o=0;$o<=9;$o++ ){
        for( $g=0;$g<=9;$g++ ){
            echo $t.$o.$g."<br />"; 
        }
    }
}


?>

这个程序给出的输出是:

000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 直到 999

我想使用递归来实现这样的事情..说我想对四个嵌套循环做同样的事情: 我为此编写了一个程序,但徒劳无功:

<?php

$done = array("t","o","g");
$i = 0;

function recurse($x){
    //$done = array("t","o","g");
    global $done;
    global $i;
    global $t;
    global $o;
    global $g;

    $i++;

        for( $$x=0;$$x<=9;$$x++ ){
            if( $x!="g" ){
                recurse($done[$i]);
            }else{
                echo $t.$o.$g."<br />";
                $i=0;

            } //if else 

        } // for end



} //function end

echo "{$done[0]} {$done[1]} {$done[2]}<br />";
 recurse($done[0]);

    print_r($done);


?>

输出: 托克 000 001 002 003 004 005 006 007 008 009 000 001 002 003 004 005 006 007 008 009 000 001 002 003 004 005 006 007 008 009 000 001 002 003 004 005 006 007 008 009

因此,在 009 之后不是 010 011 012 而是回到 000 。 帮助表示赞赏!

【问题讨论】:

  • 只是为了记录,我不明白为什么这个问题因为不清楚而被关闭。它包含代码、结果和预期结果,就像它应该的那样。仅仅因为代码的方法很糟糕,这并不会使问题出错。作为记录,您需要在离开时减少 $i,否则调用函数将使用 $done 中的错误元素。这就是为什么人们避免使用全局变量以及为什么 Georg 的答案提供了更好的方法的原因,即将所有相关状态作为参数传递。

标签: php recursion nested-loops


【解决方案1】:

我猜你正在寻找这样的东西:

function enum($n) {
    if($n == 0)
        return array('');
    $result = array();
    foreach(enum($n - 1) as $e)
        foreach(range(0, 9) as $k)
            $result []= $e . $k;
    return $result;
}

print_r(enum(3));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多