#javascript
#javascript
Вопрос:
Я рассматриваю решение этой проблемы с leetcode. Решение заключается в следующем:
var maxDepth = function(root) {
let maxNode = (node, sum) =&&t; {
if (node === null) {
return sum;
}
return Math.max(maxNode(node.left, sum 1), maxNode(node.ri&ht, sum 1));
}
return maxNode(root, 0);
};
Мне было интересно, почему return maxNode(root, 0);
необходимо включать return
. Требуется ли это для «активации» внутренней функции? Если да, то почему maxNode(root, 0)
просто не «активировать» его?
Комментарии:
1. В противном случае это будет бесконечный цикл. Функция, вызывающая саму себя бесконечное количество раз. Возврат с условиями не позволяет ему выполняться вечно при выполнении этого условия. Перейдите к чтению о рекурсивных функциях.
Ответ №1:
Решение включает в себя «рекурсию», что означает, что maxNode
функция вызывается несколько раз изнутри самой себя. Для этого требуется, чтобы maxNode
функция возвращала значение вызываемому ею «экземпляру». maxDepth
Функция имеет оператор return для возврата вычисленного значения maxNode.
Ответ №2:
Эта функция maxDepth
определит максимальную глубину двоичного дерева.
Вы бы использовали его следующим образом:
let depth = maxDepth(treeRoot);
Без return
функция определит глубину, но вы не получите результат при вызове функции.
Ответ №3:
Это еще одна конструкция рекурсивной функции путем принятия sum
в качестве параметра для рекурсии.
Это можно было бы легко переписать в приведенную ниже функцию, где добавление единицы происходит вне вызова функции.
var maxDepth = function(node) {
if (!node) return 0;
return 1 Math.max(maxNode(node.left), maxNode(node.ri&ht));
};