Когда использовать return в рекурсивной функции? - PullRequest
0 голосов
/ 27 мая 2020

Я изучаю рекурсивную конструкцию BST и обнаружил, что метод insert не использует ключевое слово return при реализации рекурсии, но метод contains действительно использует ключевое слово return. Кто-нибудь может мне это объяснить? Большое спасибо!

  static class BST {
    public int value;
    public BST left;
    public BST right;

    public BST(int value) {
      this.value = value;
    }

    public BST insert(int value) {
      // Write your code here.
      // Do not edit the return statement of this method.
            if (value < this.value) {
                if (left == null) {
                    BST newBST = new BST(value);
                    left = newBST;
                } else {
                    left.insert(value);
                }
            } else {
                if (right == null) {
                    BST newBST = new BST(value);
                    right = newBST;
                } else {
                    right.insert(value);
                }
            }
      return this;
    }

    public boolean contains(int value) {
      // Write your code here.
            if (value < this.value) {
                if (left == null) {
                    return false;
                } else {
                    return left.contains(value);
                }
            } else if (value > this.value) {
                if (right == null) {
                    return false;
                } else {
                    return right.contains(value);
                }
            } else{
                return true;
            }
    }

Ответы [ 2 ]

1 голос
/ 27 мая 2020

По сути, поскольку вставка не реализована как функция, а содержит ее, а это означает, что вставка имеет только побочные эффекты, она изменяет состояние BST. Contains по своей сути является функцией - она ​​возвращает ответ для заданного ввода.

Факт, что вставка возвращает this в конце, не является обязательным, он может также легко иметь возвращаемое значение void.

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

0 голосов
/ 27 мая 2020

Функция «insert» имеет только оператор return в самом конце, потому что все, что она должна вернуть, - это «this», а не зависеть от внешних факторов и выполнения функции.

Итак , краткая версия: вы используете "return", когда вам нужно, и вы не используете "return", когда вам это не нужно.

...