В чем разница между рекурсией и рекурсией экземпляра класса - PullRequest
0 голосов
/ 26 марта 2012

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

В основном мне было любопытно узнать разницу между чем-то вроде:

class MyRecursiveClass
{
public:
     int myData;
     MyRecursiveClass* nextInLine;
     int myRecursiveFunction(int data)
     {
          data+=myData;
          if(nextInLine == null)
               return data;
          else
               return nextInLine->myRecursiveFunction(data);

     }
}

и

int staticRecursiveFunction(MyRecursiveClass* target, int currentData)
{
     if(target == null)
         return currentData;
     currentData+=target->myData;
     staticRecursiveFunction(target->nextInLine, currentData);
}

или

int otherStaticRecursiveFunction(MyRecursiveClass* target)
{
     if(target == null)
         return 0;
     return target->myData + otherStaticRecursiveFunction(target->nextInLine);
}

В основном мне нужны различия в накладных расходах, а также лучшие термины для различий между двумя методологиями (я был в растерянности, когда пытался Google)

Также любые личные мнения и / или предпочтения. Меня больше обучали рекурсии как инструменту для выполнения работы, и мне хотелось бы услышать профессиональные (и любительские) мнения.

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

1 Ответ

1 голос
/ 26 марта 2012

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

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

Что касается накладных расходов на вызов, то вызов экземпляра / виртуального метода, вероятно, немного медленнее в большинстве систем из-заотправка, которая должна иметь место, но это не может быть значительным в великой схеме вещей.(Если стоимость вызовов методов вызывает беспокойство, вы можете полностью отказаться от рекурсий и развернуть их в цикл).

...