Оператор возврата из цикла в метод рекурсии

public void delete(String key) {
    root = delete(root, key, 0);
}

public Node delete(Node x, String key, int d) {
    if(x == null) 
        return null;
    if(d == key.length())
        x.val = null;
    else {
        char c = key.charAt(d);
        x.next[c] = delete(x.next[c], key, d + 1);
    }

    //----------------
    if(x.val !=null ) 
        return x;
    for (char c = 0;c < R ; c++ ) {
        if(x.next[c] != null)
            return x;
        return null;
    }
}

из книги Алгоритм 4, TrieST.java

Так что же происходит? for цикл может вернуться x много раз; это нормально для метода возвращаемого типа? Если все в порядке, то каково окончательное возвращаемое значение?

1 ответ

Когда вызывается return, функция завершается.

Таким образом, значение, возвращаемое функцией:

  • x если x.val!= ноль
  • x если для первого c (т.е. c = 0), x.next[c]!=null
  • иначеноль

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

return null;

должно быть после цикла. Тогда функция вернет:

  • x если x.val!= ноль
  • x, если существует c, для которого x.next[c]!=null
  • иначеноль
Другие вопросы по тегам