Перевод вложенных циклов в рекурсию

Статус
В этой теме нельзя размещать новые ответы.

Testak

Новичок
Перевод вложенных циклов в рекурсию

Вот на днях дали задание вывести следующее:
Дано: Массив
PHP:
$a=array("a","5","!"); # Любые сиволы, любое количество
$n=3 # - максимальная длина
Вывести на экран:
a
5
!
aa
a5
a!
5
5a
55
5!
!
!a
!5
!!

Я построил вложенные циклы следующим образом:
PHP:
empty($t0);
foreach($a as $v){
	$t1=$t0.$v;	
	echo $t1."<br>";
	foreach($a as $v){
		$t2=$t1.$v; 
		echo $t2."<br>";
		foreach($a as $v){
			$t3=$t2.$v;	
			echo $t3."<br>";
			/*... $n раз*/
		}
	}
}
Всё работает, но нельзя указать n вложение циклов. Хотелось узнать, как из данного получить код с рекурсией ?
Заранее спасибо.
 

Sender

Новичок
навскидку, здесь по идее нету рекурсии, есть два цикла только.
 

Testak

Новичок
Автор оригинала: Фанат
а ты не переводи.
а напиши заново
Пробовал несколько раз, никак не могу додумать...

2Sender: Пример кода можешь запостить? Не понимаю откуда ты взял 2 цикла, ведь здесь n-ное кол-во вложенных циклов foreach.
 

Sender

Новичок
да, чего-то я намудрил

вывод должен быть именно так как ты указал? в такой же последовательности?

твой код выводит немного другую картину, нежели ты указал надо вывести....
 

Testak

Новичок
Автор оригинала: Sender
да, чего-то я намудрил

вывод должен быть именно так как ты указал? в такой же последовательности?

твой код выводит немного другую картину, нежели ты указал надо вывести....
нет, не именно так, просто надо вывести всевозможные сочетания сиволов из массива
 

Bitterman

Новичок
Так вроде все прозрачно:

Код:
function Recurse($a, $text, $n)
{
    foreach($a as $v)
   { 
       $t1=$text . $v;     
        echo $t1."<br>";
        if($n < LIMIT_CONSTANT)
           Recurse($a, $t1, $n + 1); 
    }
}
Как-то так по-моему, хотя не проверял.


Проверил, работает. Вернее, она выводит то же самое, что выводит твой код, но не тот вывод, который ты написал. Так что ты определись, что тебе нужно.
 

Sender

Новичок
<code>
Код:
<?

$a=array("a","5","!"); # Любые сиволы, любое количество 
$n=3; # - максимальная длина

/**
 * 
 * a
 * aa
 * a5
 * a!
 * 5
 * 5a
 * 55
 * 5!
 * !
 * !a
 * !5
 * !!
 * 
 */
$result = array();

for( $i=0; $i < count($a); $i++ )
{
	$result[] = $a[$i];
	if( $n > 2 )
	{
		rekurs( count( $result ) - 1 );
	}
}

function rekurs( $c )
{
	global $result, $a, $n;
	for( $i=0; $i < count($a); $i++ )
	{
		$result[] = $result[$c] . $a[$i];
		if( strlen( $result[count( $result) - 1] ) < $n )
		{
			rekurs( count( $result ) - 1 );	
		}
	}
}

print_r( $result );
?>
</code>
 

Testak

Новичок
Спасибо, попробую

-~{}~ 08.08.06 11:35:

Замечательно работает, спасибо
 

Фанат

oncle terrible
Команда форума
Осталось только непонятным - кому выдали задание.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху