Чтобы использовать рекурсию в R, вы можете использовать различные подходы. Рекурсия — это метод программирования, при котором функция вызывает саму себя для решения проблемы. Вот несколько методов с примерами кода:
Метод 1: расчет факториала
Факториал неотрицательного целого числа n — это произведение всех положительных целых чисел, меньших или равных n. Вот пример того, как вычислить факториал с помощью рекурсии:
factorial <- function(n) {
if (n == 0 || n == 1) {
return(1)
} else {
return(n * factorial(n - 1))
}
}
# Example usage
result <- factorial(5)
print(result) # Output: 120
Метод 2: последовательность Фибоначчи
Последовательность Фибоначчи представляет собой серию чисел, в которой каждое число представляет собой сумму двух предыдущих. Вот пример того, как сгенерировать последовательность Фибоначчи с помощью рекурсии:
fibonacci <- function(n) {
if (n == 0) {
return(0)
} else if (n == 1) {
return(1)
} else {
return(fibonacci(n - 1) + fibonacci(n - 2))
}
}
# Example usage
result <- fibonacci(6)
print(result) # Output: 8
Метод 3: рекурсивное суммирование списка
Вы можете использовать рекурсию для вычисления суммы элементов в списке. Вот пример:
list_sum <- function(lst) {
if (length(lst) == 0) {
return(0)
} else {
return(lst[1] + list_sum(lst[-1]))
}
}
# Example usage
numbers <- c(1, 2, 3, 4, 5)
result <- list_sum(numbers)
print(result) # Output: 15
Метод 4: двоичный поиск
Рекурсию также можно использовать для реализации двоичного поиска — алгоритма «разделяй и властвуй» для поиска элементов в отсортированном списке. Вот пример:
binary_search <- function(arr, target, low, high) {
if (low > high) {
return(-1) # Target not found
} else {
mid <- floor((low + high) / 2)
if (arr[mid] == target) {
return(mid) # Target found at index mid
} else if (arr[mid] > target) {
return(binary_search(arr, target, low, mid - 1)) # Search in the left half
} else {
return(binary_search(arr, target, mid + 1, high)) # Search in the right half
}
}
}
# Example usage
numbers <- c(1, 3, 5, 7, 9)
target <- 5
result <- binary_search(numbers, target, 1, length(numbers))
print(result) # Output: 3