Рекурсивная функция со статической переменной

5
задан Steve 22 August 2009 в 19:28
поделиться

8 ответов

Более идиоматический способ - разделить его на две функции:

void foo() {
   foo_recursive(0);
}

void foo_recursive(int count) {
    if (count < 5) {
        count++;
        cout << count << endl;
        foo_recursive(count);
    } else {
        cout << "count > 5" << endl;
    }
}

Которая имеет то преимущество, что не требует от вызывающей стороны предоставления аргумента foo () , а также вам не нужна статическая переменная (что я всегда считаю плохой идеей).

19
ответ дан 18 December 2019 в 05:44
поделиться

Поместите это в else

else
{
    cout<<"count > 5"<<endl;
    count = 0;
}

Если вы хотите правильно выполнить рекурсию, посмотрите ответ свиристеля.

6
ответ дан 18 December 2019 в 05:44
поделиться

Вместо использования статической переменной просто передайте count в качестве аргумента.

void foo(int count) {
    if (count < 5) {
        count++;
        cout << count << endl;
        foo(count);
    } else {
        cout << "count > 5" << endl;
    }
}

int main() {
    foo(0);
    foo(0);
}

Статические переменные и рекурсия обычно несовместимы.

4
ответ дан 18 December 2019 в 05:44
поделиться

Как насчет этого

count = (count+1)%5
1
ответ дан 18 December 2019 в 05:44
поделиться
void foo() {
  ...
  if (count > 0) count--; // you can decrease it at then end of foo()
}
0
ответ дан 18 December 2019 в 05:44
поделиться

Вы можете изменить foo, чтобы он принимал логическую переменную, которая означает сброс или нет.

void foo() {
  foo(false);
}

void foo(int b)
{
    static int count = 0;

    if(b) { count = 0 };

    ...
}

вызовите foo (), как и раньше, или foo (true), если вы хотите сбросить его.

0
ответ дан 18 December 2019 в 05:44
поделиться

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

void foo () {
  if (count >= 5) {
    cout<<"count >= 5"<<endl;
    count = 0;
    return;
  }

  cout<<++count<<endl;

  foo();
}

Сохраняет шаблонный код.

0
ответ дан 18 December 2019 в 05:44
поделиться

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

// Use Default arguments
void foo( int count = 0);

void foo( int count )
{
    if(count<5)
    {
        count++;
        cout<<count<<endl;
        foo(count);
    }
    else
    {
        cout<<"count > 5"<<endl;
    }
}

int main()
{
    foo(); // by default argument =0
    foo(); // by default argument =0

    return 0;
}
0
ответ дан 18 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: