#swift #recursion
#swift #рекурсия
Вопрос:
Я просматривал некоторые рекурсивные функции дерева, но я немного запутался в возврате ||
, при каком условии выполняется тестирование возврата?
func search(node: Node?, searchValue: Int) -> Bool {
if node == nil {
return false
}
if node?.data == searchValue {
return true
} else {
return search(node: node?.left , searchValue: searchValue) || search(node: node?.right, searchValue: searchValue)
}
}
Комментарии:
1. docs.swift.org/swift-book/LanguageGuide/BasicOperators.html
2. Вам следует проверить ссылку, предоставленную pawello, и также узнать о других операторах.
Ответ №1:
Оператор return — это рекурсивный вызов search
функции с левым поддеревом и правым поддеревом. Обратите внимание, что search
возвращает Bool
, указывающее, содержит ли дерево искомое значение.
Поскольку оператор or ||
замыкает, поиск в правом поддереве будет выполняться только в том случае, если search
не удалось найти элемент в левом поддереве. Когда поиск по левому поддереву возвращает результат true
, то search
сразу возвращается true
без поиска по правому поддереву. Если оба рекурсивных вызова search
возвращают false
, то поиск действительно завершился неудачей и false
возвращается (то есть false || false
есть false
).
Итак, этот оператор return выполняет следующее:
if searchValue is in the left subtree {
return true
} else if the searchValue is in the right subtree {
return true
} else {
return false
}
Ответ №2:
Это проверка, является ли узел left
OR ( ||
) right
либо nil
или data
равен searchValue
. Если какое-либо из этих условий удовлетворяет, оно возвращает true
. Если оба являются, false
это приводит к false
.