Основной случай в рекурсивном методе

Теоретический вопрос здесь об основе или останавливающемся случае в рекурсивном методе, каковы его стандарты?

Я имею в виду, действительно ли нормально не иметь тело в нем, просто оператор возврата?

Всегда это как следующее:

if (input operation value)
    return sth;

У Вас есть различные мысли об этом?

9
задан Stefan van den Akker 8 June 2016 в 09:12
поделиться

4 ответа

Шаблон для рекурсивных функций состоит в том, что они выглядят примерно так:

f( value ) 
   if ( test value )
      return value
   else
      return f( simplify value )

Я не думаю, что вы можете сказать больше, чем это об общих случаях .

11
ответ дан 4 December 2019 в 13:46
поделиться

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

Например, это вполне допустимо:

int factorial (int n) {
  if (n <= 5) {
    // Not just a return statement
    int x = 1;
    while (n > 0) {
      x *= n;
      -- n;
    }
    return x;
  } else {
    return n * factorial(n-1);
  }
}
3
ответ дан 4 December 2019 в 13:46
поделиться

В некоторых случаях ваш базовый случай -

return literal

В некоторых случаях ваш базовый вариант - это не просто «вернуть литерал».

Не может быть «стандарта» - это зависит от вашей функции.

«Функция Сиракузы» http://en.wikipedia.org/wiki/Collatz_conjecture , например, не имеет тривиального базового случая или тривиального буквального значения.

"У тебя другие мысли по этому поводу ??" Это не совсем разумный вопрос.

Рекурсия должна прекратиться, вот и все. Тривиальная хвостовая рекурсия может иметь «базовый случай», который возвращает литерал, или это может быть вычисление. Более сложная рекурсия может не иметь тривиального «базового случая».

1
ответ дан 4 December 2019 в 13:46
поделиться

Это полностью зависит от конкретной рекурсивной функции. В общем, это не может быть пустой оператор return; , однако - для любой рекурсивной функции, возвращающей значение, базовый случай также должен возвращать значение этого типа, поскольку func (base ) также вполне допустимый вызов. Например, рекурсивная функция факториал вернет 1 в качестве базового значения.

0
ответ дан 4 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

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