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

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

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 вложение циклов. Хотелось узнать, как из данного получить код с рекурсией ?
Заранее спасибо.
 
навскидку, здесь по идее нету рекурсии, есть два цикла только.
 
Автор оригинала: Фанат
а ты не переводи.
а напиши заново
Пробовал несколько раз, никак не могу додумать...

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

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

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

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

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

Код:
function Recurse($a, $text, $n)
{
    foreach($a as $v)
   { 
       $t1=$text . $v;     
        echo $t1."<br>";
        if($n < LIMIT_CONSTANT)
           Recurse($a, $t1, $n + 1); 
    }
}

Как-то так по-моему, хотя не проверял.


Проверил, работает. Вернее, она выводит то же самое, что выводит твой код, но не тот вывод, который ты написал. Так что ты определись, что тебе нужно.
 
<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>
 
Спасибо, попробую

-~{}~ 08.08.06 11:35:

Замечательно работает, спасибо
 
Осталось только непонятным - кому выдали задание.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху