Надо заполнить массив цифрами, но не получается, ошибка Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) Я уже по всякому пробовал PHP: function rec() { $arr = []; static $i; $i = 0; $arr[]=$i; $i++; if($i <= 5) { rec(); } return $arr; } echo '<pre>'; print_r(rec()); echo '</pre>';
Вы в каждой итерации присваиваете переменной $i значение 0, а потом проверяете, не меньше ли оно 5, если меньше - заново, получается что цикл происходит бесконечно,т.к. значение $i всегда равно 0.
А зачем для этого извращение с рекурсией? Почему бы не заполнить в обычном цикле или, например, с помощью range() ?
Так тоже не работает PHP: $a = 0; $arr= []; function func() { global $a; global $arr; $a++; $arr[] = $a; if(count($arr < 5)) { $a++; return func(); } return $arr; } echo '<pre>'; print_r(func()); echo '</pre>'; --- Добавлено --- А зачем вообще учиться программировать, если есть программисты?
Я сделал работает, но почему, если обернуть в дополнительную функцию, то работать не будет, пишет Undefined index? PHP: $array = [1,2,3,4,5,6,7,8,9]; //function rec($mas) { $a = 0; $arr= []; function func($mas) { global $a; global $arr; $arr[] = $mas[$a]; $a++; if(count($arr) < count($mas)) { return func($mas); } return $arr; } /* if(count($arr) < count($mas)) { func($mas); } */ //return $arr; //} echo '<pre>'; print_r(func($array)); //print_r(rec($array)); echo '</pre>';
Секундочку, сударь! Ваш код не похож на код человека, который учится, а больше смахивает на горе-пилота, который прочитал только инструкцию по взлёту, забил на всё остальное, а теперь просит помощи у наземных служб, чтобы посадить самолет. Если бы вы изучили основы, внимательно прочитали про рекурсии или слушали лекции препода, если такой есть, то подобного бы не написали.
Я сделал, но почему не добавляет первый элемент? пишет Undefined index PHP: $array = ['h', 1,2,3,4,5,6,7,8,9]; function rec($mas) { $a = 0; $arr= []; function func($mas) { global $a; global $arr; $arr[] = $mas[$a]; $a++; if(count($arr) < count($mas)) { return func($mas); } return $arr; } return func($mas); } echo '<pre>'; print_r(rec($array)); echo '</pre>';
Я уже ответил выше. Вы пытаетесь использовать свои недознания для "гадания", вместо того, чтобы использовать знания для решения задачи. --- Добавлено --- Осторожно, тут есть ребята, которые не стесняются в выражениях
Не понимаю, почему не видит переменную $a, если я указал, что она глобальная, значит должна взяться из области видимости функции inFoo? Как тогда к ней обратиться? Код (Text): function inFoo() { $a = 5; function foo() { global $a; return $a; } return foo(); } echo '<pre>'; print_r(inFoo()); echo '</pre>'; --- Добавлено --- Я прорвался PHP: $array = ['h', 1,2,3,4,5,6,7,8,9]; function rec($massiv) { $a = 0; $arr=[]; function func($massiv, $a, $arr) { $arr[] = $massiv[$a]; $a++; if(count($arr) < count($massiv)) { return func($massiv, $a, $arr); } return $arr; return $a; } return func($massiv, $a, $arr); } echo '<pre>'; print_r(rec($array)); echo '</pre>';
php - не Pascal, в нём нет вложенных функций. Позволено объявлять функцию внутри функции, чтобы работали require, но "внутренняя" функция получает внешнюю область видимости (т.е. работает так же, как если бы была объявлена снаружи). Но согласен с @Deonis - решать рекурсией то, что решается циклом в две строчки - глупость. Рекурсией надо решать те задачи, которые без неё не решаются/решаются трудно. --- Добавлено --- Анонимные функции - исключение. С использованием механизма замыканий можно организовать что-то типа внутренней процедуры/функции Pascal, хотя это и используется немного для другого.