Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обясните механизм работы рекурсивных функций...
 
 автор: tAleks   (14.11.2006 в 22:17)   письмо автору
 
 

Иили дайте ссылку почитать....
А то заделал функцию, она работает (вроде), но всехать в механизм не могу..

function menu($code_group)
{
    if($code_group != 0)
    {    
        // Запрос имени группы и родителя
        $query = mysql_query("SELECT name, code_parent FROM pict_groups WHERE code_group = $code_group LIMIT 1") or die('Ошибка 1 '.mysql_error());
        if(mysql_num_rows($query) > 0) $g = mysql_fetch_assoc($query);
        
        // Делаем строку
        return menu($g['code_parent']).'/<a href="'.$_SERVER['PHP_SELF'].'?code_group='.$code_group.'">'.$g['name'].'</a>';
    }
}


При входе в функцию, проверяется равенство нолю...
Последний запрос всегда дает 0, но тогда где возврат результата из функции?
Но ведь она работает...

На сколько я понимаю, рекурсивная функция это что-то вроде вложенной функции одна в другую...

Но, че-то я все-равно не догоняю как это работает...
Объясните пожалуйста.. а...

   
 
 автор: cheops   (15.11.2006 в 00:03)   письмо автору
 
   для: tAleks   (14.11.2006 в 22:17)
 

Функция вызывает сама себя, как только такая возможность исчезает начинается выход из рекурсивного вложения до тех пор пока самая верхняя функция не прекратит работу.

   
 
 автор: tAleks   (15.11.2006 в 12:27)   письмо автору
 
   для: cheops   (15.11.2006 в 00:03)
 

Вышеприведенная функция возвращает строку пути, типа :
/гуппа1/Группа2/группа3

И каждая группа, является ссылкой. А как сделать так, чтобы псоледняя группа (группа 3), не была ссылкой?

   
 
 автор: cheops   (15.11.2006 в 13:45)   письмо автору
 
   для: tAleks   (15.11.2006 в 12:27)
 

Хм... она по сути первая в вызове? Тогда можно передать фунции второй параметр-флаг, который при первом вызове равен true, но при последующих вызовах он равен false.
<?php
function menu($code_group$no_link=true

    if(
$code_group != 0
    {     
        
// Запрос имени группы и родителя 
        
$query mysql_query("SELECT name, code_parent FROM pict_groups WHERE code_group = $code_group LIMIT 1") or die('Ошибка 1 '.mysql_error()); 
        if(
mysql_num_rows($query) > 0$g mysql_fetch_assoc($query); 
         
        
// Делаем строку 
        
if($no_link)
        {
          
$no_link false;
          return 
menu($g['code_parent'], $no_link).'/'.$g['name']; 
        }
        else
        {
          return 
menu($g['code_parent'], $no_link).'/<a href="'.$_SERVER['PHP_SELF'].'?code_group='.$code_group.'">'.$g['name'].'</a>'
         }
    } 
}
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования