void foo(bool b, int i, double d, String s, Object o) {
  if (someCondition) {
    return foo(b, i, d, s, o);
  }
}

Я думал, что есть что-то вроде

return foo(this);

Как я могу вызвать foo из foo без передачи параметров? Есть ли стенография?

0
iDecode 6 Окт 2020 в 10:56

1 ответ

Лучший ответ

Нет.

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

Что вы можете сделать, и что я обычно делаю для рекурсивных алгоритмов, так это иметь локальную вспомогательную функцию:

void foo(bool b, int i, double d, String s, Object o) {
  void rec() {
    ...
    if (someCondition) {
      return rec();
    }
  }
  rec();
  // ...
}

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

Другой вариант, поскольку это выглядит как хвостовая рекурсия, - это переписать в цикл while:

void foo(bool b, int i, double d, String s, Object o) {
  while (someCondition) {
    // the fix.
  }
  // the actual code.
}
1
lrn 6 Окт 2020 в 08:06