php递归增量

时间:2012-02-10 12:50:59

标签: php recursion increment

我有一个像这样的数组:

Array ( [0] => 0 [1] => 0 [2] => 0 );

有3个元素(3个整数),我希望它们从0增加到36;

我知道最好的方法是递归,因为必须检查每个元素以查看它是否处于最大值(36),如果是,则将最后一个元素设置为0并递增前一个元素。 p>

所以我的阵列基本上想要像:

Array ( [0] => 0 [1] => 0 [2] => 0 );
Array ( [0] => 0 [1] => 0 [2] => 1 );
Array ( [0] => 0 [1] => 0 [2] => 2 );
...
Array ( [0] => 0 [1] => 0 [2] => 36 );
Array ( [0] => 0 [1] => 1 [2] => 0 );
Array ( [0] => 0 [1] => 1 [2] => 1 );
....
Array ( [0] => 0 [1] => 1 [2] => 36 );
Array ( [0] => 0 [1] => 2 [2] => 0 );

ETC ETC ETC

但我不知道如何以递归的方式做到这一点!

然而,该解决方案还需要适用于4个元素和5个元素以及6个等等!

有人可以给我指点吗?

6 个答案:

答案 0 :(得分:2)

如果您只想要一个基数为37的数字,请考虑改为使用base_convert

答案 1 :(得分:2)

$limit = 36;
$step  = 1;
$array = array ( 0 , 0 , 0 );


function increment( array $array , $limit , $step )   {
    $result = $array = array_values( $array );
    while( count( array_keys( $result , $limit ) ) != count( $array ) ) {
        for( $i = 1 ; $i <= count( $result ) ; $i++ ) {
             while( $result[ count( $result )-$i ] < $limit )  {
                 $result[ count( $result )-$i ] += $step;
             }
        }
    }
    return $result;
}

var_dump( increment( $array , $limit , $step ) );

答案 2 :(得分:2)

类似于Timurs的答案,但效率稍高,并且需要变量基础。

$array = array(0, 0, 0);

function bloop(&$array, $amount, $base = 37)
{
    $i = count($array) - 1;
    while ($i >= 0) {
        $array[$i] = $amount % $base;
        $amount = ($amount - $array[$i--]) / $base;
    }
}

bloop($array, (37 * 37 * 2) + (37 * 5) + 8); // 2, 5, 8

var_dump($array);

答案 3 :(得分:1)

function fill($limit){
   $ret = array();
   while($i<=$limit){
      while($j<=$limit){
         while($k<=$limit){
            $ret[] = array($i,$j,$k);
            print_r($a);
            $k++;
         }
         $j++;
      }
      $i++;
   }
   return $ret;
}

fill(36);

答案 4 :(得分:1)

function increment(&$array,$num){
    $plus = $num;
    for( $i=count($array)-1;$i>=0;$i-- ){
        $array[$i] += $plus;
        if( $array[$i]>36 ){
            $tmp = $array[$i]%37;
            $plus = ($array[$i]-$tmp)/37;
            $array[$i] = $tmp;
        }else{
            break;
        }
    }
}

// init array
$array = array( 0,0,0 );
// increment 100 times
increment($array,100);

var_dump($array);

答案 5 :(得分:1)

这个怎么样?

<?php
$arr = array(0=>0,2=>0);
foreach (range(0,36) as $f )
{
   echo "<pre>";print_r(array_pad(array($f),3,0));
   echo "<pre>";print_r(array_pad(array($f),-3,0)); 
   $arr_n = $arr+array(1=>$f);
   ksort($arr_n);
   echo "<pre>"; print_r($arr_n);
}

?>