JavaScript, Выход из рекурсивной функции
От: Аноним  
Дата: 25.06.10 08:08
Оценка:
Есть что то похожее на:


this.getItems = function() {
    //some if, checks whether the function has already invoked itself
    //some loop
        for();

        //some if
        (is something){
               thus.getItems(); //call itself
        } else {   //ELSE#1
              //do something 1
              //return result
        }
    //else - invoked itself
        //some loop
       
        //some if
            //do something2
            return result



Мне нужно, сейчас, на втором вызове:
return result;

я попадаю в //ELSE#1
мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.
Re: JavaScript, Выход из рекурсивной функции
От: Senyai Россия http://www.arseniy.net
Дата: 25.06.10 08:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть что то похожее на:


Можно более реальный js. Я ничего не понимаю.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re: JavaScript, Выход из рекурсивной функции
От: taluk  
Дата: 29.06.10 11:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть что то похожее на:



А>
А>this.getItems = function() {
А>    //some if, checks whether the function has already invoked itself
А>    //some loop
А>        for();

А>        //some if
А>        (is something){
А>               thus.getItems(); //call itself
А>        } else {   //ELSE#1
А>              //do something 1
А>              //return result
А>        }
А>    //else - invoked itself
А>        //some loop
       
А>        //some if
А>            //do something2
А>            return result
А>



А>Мне нужно, сейчас, на втором вызове:

А>return result;

А>я попадаю в //ELSE#1

А>мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.

Явно это не возможно, есть такая штука — стек вызова... Хотя есть вариант эмулировать такое поведение бросанием исключения, которое содержит результат работы функции — тогда стек рекурсивного вызова размотается до первого обработчика исключений, который будет трактовать это исключение как результат работы функции. Примерно так

//сама функция
this.func = function()
{
  if(some)
  {
    this.func();//углубить рекурсию
  }
  else
  {
    throw "тут результат";//размотать стек до первого обработчика
  }
}
//вызов
try
{
  this.func();
}
catch(res)
{
  alert(res);//"тут результат"
}
Re[2]: JavaScript, Выход из рекурсивной функции
От: Аноним  
Дата: 30.06.10 04:48
Оценка:
Здравствуйте, taluk, Вы писали:

T>Здравствуйте, Аноним, Вы писали:


А>>Есть что то похожее на:



А>>
А>>this.getItems = function() {
А>>    //some if, checks whether the function has already invoked itself
А>>    //some loop
А>>        for();

А>>        //some if
А>>        (is something){
А>>               thus.getItems(); //call itself
А>>        } else {   //ELSE#1
А>>              //do something 1
А>>              //return result
А>>        }
А>>    //else - invoked itself
А>>        //some loop
       
А>>        //some if
А>>            //do something2
А>>            return result
А>>



А>>Мне нужно, сейчас, на втором вызове:

А>>return result;

А>>я попадаю в //ELSE#1

А>>мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.

T>Явно это не возможно, есть такая штука — стек вызова... Хотя есть вариант эмулировать такое поведение бросанием исключения, которое содержит результат работы функции — тогда стек рекурсивного вызова размотается до первого обработчика исключений, который будет трактовать это исключение как результат работы функции. Примерно так


T>
T>//сама функция
T>this.func = function()
T>{
T>  if(some)
T>  {
T>    this.func();//углубить рекурсию
T>  }
T>  else
T>  {
T>    throw "тут результат";//размотать стек до первого обработчика
T>  }
T>}
T>//вызов
T>try
T>{
T>  this.func();
T>}
T>catch(res)
T>{
T>  alert(res);//"тут результат"
T>}
T>


Классный солушен!! Спасибо большое!!!
Re: JavaScript, Выход из рекурсивной функции
От: Mamut Швеция http://dmitriid.com
Дата: 30.06.10 08:21
Оценка: 1 (1) +2
Здравствуйте, Аноним, Вы писали:

А>Есть что то похожее на:



А>
А>this.getItems = function() {
А>    //some if, checks whether the function has already invoked itself
А>    //some loop
А>        for();

А>        //some if
А>        (is something){
А>               return  this.getItems(); //call itself
А>        } else {   //ELSE#1
А>              //do something 1
А>              //return result
А>        }
А>    //else - invoked itself
А>        //some loop
       
А>        //some if
А>            //do something2
А>            return result
А>



А>Мне нужно, сейчас, на втором вызове:

А>return result;

А>я попадаю в //ELSE#1

А>мне же надо, чтобы фукнция вернула результат, во "вне" сразу, т.е. сразу произошел выход из рекурсивной функции.


Выделено выше.


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.