Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 3 из 3

Тема: Рекурсия

  1. #1
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    69
    Репутация:
    0 ±

    Рекурсия

    Всем добрый вечер.
    Помоги убрать рекурсию
    я полазил почитал но смог только найти где скрывается рекурсия, а вот убрать ее не получается помогите.
    PHP код:
    unit_3(playerid)//рекурсия
    {
        new 
    var_unit_stock_1[2] = 0string[50], stringall[2000];
        
    strcat(stringall"{FFFFFF}Имя\tИд\tРанг\tВыговоры\n");
        foreach (new 
    Player)
        {
            if(
    PlayerInfo[i][pMember] != PlayerInfo[playerid][pMember] || PlayerInfo[i][pAdmin] > || gPlayerLogged[i] != 1) continue;
            
    var_unit_stock_1[0]++;
            if((
    var_unit_stock_1[0]) >= (pTemp[playerid][var_unit_2]*15+15) || (var_unit_stock_1[0]) < (pTemp[playerid][var_unit_2]*15)) continue;
            
    var_unit_stock_1[1]++;
            
    format(stringsizeof(string), "{FFFFFF}%s\t%i\t%i\t%i\n"Name(i), iPlayerInfo[i][pRank], PlayerInfo[i][pReprimands]);
            
    strcat(stringallstring);
        }
        if(
    var_unit_stock_1[1] > 0)
        {
            
    strcat(stringall"Следующая страница\n");
            if(
    pTemp[playerid][var_unit_2] > 0strcat(stringall"Предыдущая страница\n");
            
    format(stringsizeof(string), "{FF6F00}Список online игроков страница: %i"pTemp[playerid][var_unit_2]+1);
            
    ShowPlayerDialog(playerid282DIALOG_STYLE_TABLIST_HEADERSstringstringall"Выбрать""Закрыть");
        }
        else
        {
            if(
    pTemp[playerid][var_unit_2] > 0pTemp[playerid][var_unit_2]--, unit_3(playerid);
            
    SendClientMessage(playeridCOLOR_GREY"Игроки не найдены.");
        }
        return 
    1;

    PHP код:
    public unit_11(playerid)
    {
        new 
    tmp[2] = 0string[80], stringall[2430];
        
    strcat(stringall"{FFFFFF}Name\tОрганизация\tСтатус\n");
        foreach (new 
    Player)
        {
            if(
    PlayerInfo[i][pAdmin] > || PlayerInfo[i][pLeader] <= 0) continue;
            
    tmp[0]++;
            if((
    tmp[0]) >= (pTemp[playerid][var_unit_11]*15+15) || (tmp[0]) < (pTemp[playerid][var_unit_11]*15)) continue;
            
    tmp[1]++;
            if(
    pTemp[i][pAFK] > 5format(stringsizeof(string), "{FFFFFF}%s[%i]\t%s\tpause\n"Name(i), igFractionName[PlayerInfo[i][pLeader]-1]);
            else 
    format(stringsizeof(string), "{FFFFFF}%s[%i]\t%s\tonline\n"Name(i), igFractionName[PlayerInfo[i][pLeader]-1]);
            
    strcat(stringallstring);
        }
        if(
    tmp[1] > 0)
        {
            
    strcat(stringall"Следующая страница\n");
            if(
    pTemp[playerid][var_unit_11] > 0strcat(stringall"Предыдущая страница");
            
    format(stringsizeof(string), "{FF6F00}Список online лидеров организаций %i"pTemp[playerid][var_unit_11]+1);
            
    ShowPlayerDialog(playerid1240DIALOG_STYLE_TABLIST_HEADERSstringstringall"Выбрать""Закрыть");
        }
        else
        {
            if(
    pTemp[playerid][var_unit_11] > 0)
            {
                
    pTemp[playerid][var_unit_11]--;
                
    unit_11(playerid);
            }
            
    SendClientMessage(playeridCOLOR_GREY"Лидеры не найдены.");
        }
        return 
    1;

    PHP код:
    unit_14(playerid)
    {
        new 
    tmp[2] = 0string[60], stringall[1830];
        
    strcat(stringall"{FFFFFF}Name\tУровень\tСтатус\n");
        foreach (new 
    Player)
        {
            if(
    gPlayerLogged[i] == || PlayerInfo[i][pAdmin] < 1) continue;
            
    tmp[0]++;
            if((
    tmp[0]) >= (pTemp[playerid][var_unit_13]*15+15) || (tmp[0]) < (pTemp[playerid][var_unit_13]*15)) continue;
            
    tmp[1]++;
            if(
    pTemp[i][pAFK] > 5format(stringsizeof(string), "{FFFFFF}%s[%i]\t%i\tpause\n"Name(i), iPlayerInfo[i][pAdmin]);
            else 
    format(stringsizeof(string), "{FFFFFF}%s[%i]\t%i\tonline\n"Name(i), iPlayerInfo[i][pAdmin]);
            
    strcat(stringallstring);
        }
        if(
    tmp[1] > 0)
        {
            
    strcat(stringall"Следующая страница\n");
            if(
    pTemp[playerid][var_unit_13] > 0strcat(stringall"Предыдущая страница");
            
    format(stringsizeof(string), "{FF6F00}Список online администраторов %i"pTemp[playerid][var_unit_13]+1);
            
    ShowPlayerDialog(playerid143DIALOG_STYLE_TABLIST_HEADERSstringstringall"Выбрать""Закрыть");
        }
        else
        {
            if(
    pTemp[playerid][var_unit_13] > 0)
            {
                
    pTemp[playerid][var_unit_13]--;
                
    unit_14(playerid);
            }
            
    SendClientMessage(playeridCOLOR_GREY"Администраторы не найдены.");
        }
        return 
    1;


  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    В этом случае рекурсия совсем не смертельна, ибо она подконтрольна (в программировании очень часто рекурсию используют при реализации тех или иных систем).
    Хотя, как я понимаю, ты просто хочешь, чтоб компилятор смог отобразить потребление стека. В общем, можно использовать goto:
      Открыть/закрыть
    PHP код:
    unit_3(playerid)//рекурсия 

        
    goto_unit_3:
        new 
    var_unit_stock_1[2] = 0string[50], stringall[2000]; 
        
    strcat(stringall"{FFFFFF}Имя\tИд\tРанг\tВыговоры\n"); 
        foreach (new 
    Player
        { 
            if(
    PlayerInfo[i][pMember] != PlayerInfo[playerid][pMember] || PlayerInfo[i][pAdmin] > || gPlayerLogged[i] != 1) continue; 
            
    var_unit_stock_1[0]++; 
            if((
    var_unit_stock_1[0]) >= (pTemp[playerid][var_unit_2]*15+15) || (var_unit_stock_1[0]) < (pTemp[playerid][var_unit_2]*15)) continue; 
            
    var_unit_stock_1[1]++; 
            
    format(stringsizeof(string), "{FFFFFF}%s\t%i\t%i\t%i\n"Name(i), iPlayerInfo[i][pRank], PlayerInfo[i][pReprimands]); 
            
    strcat(stringallstring); 
        } 
        if(
    var_unit_stock_1[1] > 0
        { 
            
    strcat(stringall"Следующая страница\n"); 
            if(
    pTemp[playerid][var_unit_2] > 0strcat(stringall"Предыдущая страница\n"); 
            
    format(stringsizeof(string), "{FF6F00}Список online игроков страница: %i"pTemp[playerid][var_unit_2]+1); 
            
    ShowPlayerDialog(playerid282DIALOG_STYLE_TABLIST_HEADERSstringstringall"Выбрать""Закрыть"); 
        } 
        else 
        { 
            if(
    pTemp[playerid][var_unit_2] > 0
            {
                
    pTemp[playerid][var_unit_2]--; 
                goto 
    goto_unit_3;
            } 
            
    SendClientMessage(playeridCOLOR_GREY"Игроки не найдены."); 
        } 
        return 
    1

    PHP код:
    public unit_11(playerid

        
    goto_unit_11:
        new 
    tmp[2] = 0string[80], stringall[2430]; 
        
    strcat(stringall"{FFFFFF}Name\tОрганизация\tСтатус\n"); 
        foreach (new 
    Player
        { 
            if(
    PlayerInfo[i][pAdmin] > || PlayerInfo[i][pLeader] <= 0) continue; 
            
    tmp[0]++; 
            if((
    tmp[0]) >= (pTemp[playerid][var_unit_11]*15+15) || (tmp[0]) < (pTemp[playerid][var_unit_11]*15)) continue; 
            
    tmp[1]++; 
            if(
    pTemp[i][pAFK] > 5format(stringsizeof(string), "{FFFFFF}%s[%i]\t%s\tpause\n"Name(i), igFractionName[PlayerInfo[i][pLeader]-1]); 
            else 
    format(stringsizeof(string), "{FFFFFF}%s[%i]\t%s\tonline\n"Name(i), igFractionName[PlayerInfo[i][pLeader]-1]); 
            
    strcat(stringallstring); 
        } 
        if(
    tmp[1] > 0
        { 
            
    strcat(stringall"Следующая страница\n"); 
            if(
    pTemp[playerid][var_unit_11] > 0strcat(stringall"Предыдущая страница"); 
            
    format(stringsizeof(string), "{FF6F00}Список online лидеров организаций %i"pTemp[playerid][var_unit_11]+1); 
            
    ShowPlayerDialog(playerid1240DIALOG_STYLE_TABLIST_HEADERSstringstringall"Выбрать""Закрыть"); 
        } 
        else 
        { 
            if(
    pTemp[playerid][var_unit_11] > 0
            { 
                
    pTemp[playerid][var_unit_11]--; 
                goto 
    goto_unit_11;
            } 
            
    SendClientMessage(playeridCOLOR_GREY"Лидеры не найдены."); 
        } 
        return 
    1

    PHP код:
    unit_14(playerid

        
    goto_unit_14:
        new 
    tmp[2] = 0string[60], stringall[1830]; 
        
    strcat(stringall"{FFFFFF}Name\tУровень\tСтатус\n"); 
        foreach (new 
    Player
        { 
            if(
    gPlayerLogged[i] == || PlayerInfo[i][pAdmin] < 1) continue; 
            
    tmp[0]++; 
            if((
    tmp[0]) >= (pTemp[playerid][var_unit_13]*15+15) || (tmp[0]) < (pTemp[playerid][var_unit_13]*15)) continue; 
            
    tmp[1]++; 
            if(
    pTemp[i][pAFK] > 5format(stringsizeof(string), "{FFFFFF}%s[%i]\t%i\tpause\n"Name(i), iPlayerInfo[i][pAdmin]); 
            else 
    format(stringsizeof(string), "{FFFFFF}%s[%i]\t%i\tonline\n"Name(i), iPlayerInfo[i][pAdmin]); 
            
    strcat(stringallstring); 
        } 
        if(
    tmp[1] > 0
        { 
            
    strcat(stringall"Следующая страница\n"); 
            if(
    pTemp[playerid][var_unit_13] > 0strcat(stringall"Предыдущая страница"); 
            
    format(stringsizeof(string), "{FF6F00}Список online администраторов %i"pTemp[playerid][var_unit_13]+1); 
            
    ShowPlayerDialog(playerid143DIALOG_STYLE_TABLIST_HEADERSstringstringall"Выбрать""Закрыть"); 
        } 
        else 
        { 
            if(
    pTemp[playerid][var_unit_13] > 0
            { 
                
    pTemp[playerid][var_unit_13]--; 
                goto 
    goto_unit_14;
            } 
            
    SendClientMessage(playeridCOLOR_GREY"Администраторы не найдены."); 
        } 
        return 
    1



    Только если сам решишь использовать goto в будущем, хорошенько разберись в принципах его работы, ибо с его помощью можно как до краша довести мод, так и к зависанию привести его
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Vasya_Pupkin (30.03.2016)
  4. #3
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    69
    Репутация:
    0 ±
    Большое спасибо за помощь

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •