[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Замена рекурсии итерацией
poter
Как в данном примере заменить рекурсию итерацией
<?php

$arr = array(

'poter' => array(
1,
2,
3=>array(1,2,3)
),

);


function myCount($arr, $mode){
if(is_null($arr)){
return 0;
}
if(!is_array($arr))
return 1;
$cnt = 0;
foreach($arr AS $v){
if($mode == 1 AND is_array($v))

$cnt += myCount($v, 1);

$cnt++;
}
return $cnt;

}

echo myCount($arr, 1);

?>




Спустя 56 минут, 23 секунды (8.09.2011 - 19:13) redreem написал(а):
что такое в вашем понимании "итерация"?

Спустя 13 минут, 52 секунды (8.09.2011 - 19:27) poter написал(а):
Цитата (redreem @ 8.09.2011 - 16:13)
что такое в вашем понимании "итерация"?

циклом

Спустя 12 часов, 53 минуты, 32 секунды (9.09.2011 - 08:21) linker написал(а):
А чем вас рекурсия не устраивает?

Спустя 6 часов, 6 минут, 40 секунд (9.09.2011 - 14:27) poter написал(а):
Цитата (linker @ 9.09.2011 - 05:21)
А чем вас рекурсия не устраивает?

просто интересно увидеть как это будет выглядеть с циклом

Спустя 4 часа, 20 минут, 58 секунд (9.09.2011 - 18:48) redreem написал(а):
например так:
function myCount2($arr){
$cnt = 0;
foreach($arr AS $v1) {
if (is_array($v1)) {
$cnt++;
foreach($v1 AS $v2) {
if (is_array($v2)) {
$cnt++;
foreach($v2 AS $v3) {
$cnt++;
}
}
else $cnt++;
}
}
else $cnt++;
}
return $cnt;
}


замечания:
1. насколько я понимаю вам нужно подсчитывать количество узлов.
2. если глубина узлов будет больше, то пример работать не будет.
3. для произвольной глубины узлов так же есть решение циклом (делал себе нерекурсивный обход дерева, могу адаптировать под ваши данные).

Спустя 17 часов, 14 минут, 9 секунд (10.09.2011 - 12:02) poter написал(а):
Цитата (redreem @ 9.09.2011 - 15:48)
например так:
function myCount2($arr){
$cnt = 0;
foreach($arr AS $v1) {
if (is_array($v1)) {
$cnt++;
foreach($v1 AS $v2) {
if (is_array($v2)) {
$cnt++;
foreach($v2 AS $v3) {
$cnt++;
}
}
else $cnt++;
}
}
else $cnt++;
}
return $cnt;
}


замечания:
1. насколько я понимаю вам нужно подсчитывать количество узлов.
2. если глубина узлов будет больше, то пример работать не будет.
3. для произвольной глубины узлов так же есть решение циклом (делал себе нерекурсивный обход дерева, могу адаптировать под ваши данные).

3. для произвольной глубины узлов так же есть решение циклом (делал себе нерекурсивный обход дерева, могу адаптировать под ваши данные). Хотеел бы увидеть этот пример

Спустя 7 минут, 6 секунд (10.09.2011 - 12:09) redreem написал(а):
извините, но это уже выходит за рамки "взаимопомощи". попотел изрядно для оного кода.

Спустя 1 месяц, 6 дней, 9 часов, 53 минуты, 21 секунда (16.10.2011 - 22:03) poter написал(а):
помогите пжл !!!

Спустя 8 минут, 22 секунды (16.10.2011 - 22:11) redreem написал(а):
че, препод лабу не принял?

Спустя 33 минуты, 27 секунд (16.10.2011 - 22:45) poter написал(а):
Цитата (redreem @ 16.10.2011 - 19:11)
че, препод лабу не принял?

лучше б помог =(

Спустя 2 минуты, 56 секунд (16.10.2011 - 22:48) redreem написал(а):
ну мы ж все тут взрослые люди и понимаем что к чему. если б ты не сказал преподу что сможешь решить задачу для произвольной глубины - проблемы бы небыло. ты бы получил твердую четверку. я напишу тебе решение. но это требует времени. а время - ...

Спустя 5 минут, 13 секунд (16.10.2011 - 22:53) redreem написал(а):
и вообще - ты уверен что твой препод не сидит на этом же форуме? а может вообще это я твой препод? smile.gif

Спустя 33 секунды (16.10.2011 - 22:53) redreem написал(а):
я просто вчера "Липучку" посмотрел - вот и прет smile.gif

Спустя 6 минут, 20 секунд (16.10.2011 - 23:00) redreem написал(а):
я парсю все php-форумы по фильтру заданий своим студентам. это у меня автоматом. как аська сбоку. даже не надейся! user posted image

Спустя 16 минут, 2 секунды (16.10.2011 - 23:16) imbalance_hero написал(а):
redreem
5+ Бедный парень теперь в глаза своему преподу не сможет смотреть... smile.gif Будет думать, что это ты...

Спустя 2 минуты, 6 секунд (16.10.2011 - 23:18) redreem написал(а):
poter, да ладно, шучу я. но если по делу - то только за бабло. это работа парень. и мы на нее УЧИЛИСЬ, тратили время вместо того чтобы попить пивка и покутить.

Спустя 7 минут, 25 секунд (16.10.2011 - 23:25) redreem написал(а):
если это сообщение читает препод potera - сделай красиво, не кричи что ты redreem... я ща абасцусь... все убежал в туалет...

Спустя 15 минут, 46 секунд (16.10.2011 - 23:41) imbalance_hero написал(а):
redreem
Ты это к чему?!

Спустя 15 часов, 37 минут, 13 секунд (17.10.2011 - 15:18) poter написал(а):
Цитата (redreem @ 16.10.2011 - 20:00)
я парсю все php-форумы по фильтру заданий своим студентам. это у меня автоматом. как аська сбоку. даже не надейся! user posted image

ты точно не мой препод =)

Спустя 2 часа, 49 минут, 22 секунды (17.10.2011 - 18:08) redreem написал(а):
я же не сказал что я пользуюсь аськой smile.gif

Спустя 5 дней, 3 часа, 41 минута, 3 секунды (22.10.2011 - 21:49) dog написал(а):
$a = array(0,1,1,array(1,1,array(2,2,3,4,5),2,array(2,2,2,array(5,4,2,1,2,2),2)));
$c = 0;
$p = array();
do {
if (is_null(key($a))) {
if (!$p)
break;
$a = end($p);
unset($p[key($p)]);
next($a);
continue;
}
$cur = current($a);
if (!is_array($cur))
$c+=$cur;
else {
$p[] = $a;
$a = $cur;
reset($a);
continue;
}
next($a);
} while (true);

Спустя 6 минут, 7 секунд (22.10.2011 - 21:55) dog написал(а):
делал для подсчёта суммы эл-в.
если поменять $c+=$cur; на $c++; будет считать их кол-во.
насчёт времени: написание кода заняло 5 минут, эм... сложно было человеку помочь? ато он меня затрахал в асе, уже 3 раза его в игнор посылал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.