У меня есть вопрос.Моя основная проблема с чтением решений в Интернете состоит в том, что я не могу понять 95% из них, потому что ответы обычно слишком технические.
Вопрос: Я создал базовую функцию, которая возвращает один ответ.Теперь мне нужно, чтобы эта функция повторялась N / 2 раза и возвращала N / 2 ответов.
Базовая функция указана ниже.Пользователь вводит функцию с переменной N. Предполагая, что он вводит N = 100, функция генерирует список a, список b и список c.Затем функция подсчитывает, сколько раз критерий достигнут и возвращает значение счетчика.В базовом случае список b создается с первыми 10 элементами списка a, а список c создается с оставшимися N-10 элементами.
f <- function (N) {
count <- 0
for (nn in 1:100) {
a <- sample(1:N)
b <- a [1:10]
c <- a [11:N]
pass <- which(c>=max(b))
if (length(pass) == 1) {
count <- count + 1
}
}
return (count)
}
answer <- f(100)
answer
Рекурсивная функция должна заставить эту базовую функцию повторять N/2 раза.Разделение списка b и c больше не основано на 10 элементах и (N-10) элементах.Теперь он основан на 1) 1, N-1 элементах, затем 2) 2, N-2 элементах, затем 3) 3, N-3 элементах и т. Д. До случая N / 2 (то есть оба списка разделены равномерно).
Как таковой я пробовал это, но это не работает.Мне нужна рекурсивная функция, которая может генерировать N / 2 ответа, то есть один ответ для каждого из случаев.Поскольку я действительно новичок в программировании, я надеюсь, что предложения могут быть явными.У меня может не быть возможности понимать неявные и частичные коды.
Спасибо всем за то, что вы так любезны и нашли время помочь другим.
f <- function (N) {
for (mm in 1: N/2) {
number <- list()
count <- 0
for (nn in 1:100) {
a <- sample(1:N)
b <- a [1:mm]
c <- a [mm+1:N]
pass <- which(c>=max(b))
if (length(pass) >= 1) {
count <- count + 1
}
}
number[mm] <- count
}
}
answer <- f(100)
answer
# NULL
Последний отредактированный код, полезныйкомментатор (Оливер) придумал, как указано ниже.Но это работает только для одного случая.В основном функция пытается разделить список из 100 случайных чисел на 2 части, b и c.Затем он пытается увидеть, содержит ли c ровно одно число, которое больше, чем наибольшее число в b.Петля for (мм в 1: (N / 2)) имитирует непрерывное нарезание для b и c.Начинается с 1 и заканчивается 50 (N / 2).Когда он равен 1, b имеет 1 элемент, а c имеет 100-1 элемент, а когда 2 равен 2, b имеет 2 элемента, а c имеет 98 элементов ... в последнем случае b и c оба имеют 50 элементов.
f <- function (N) {
for (mm in 1: (N/2)) {
number <- list()
count <- 0
for (nn in 1:100) {
a <- sample(1:N)
b <- a [1:mm]
c <- a [mm+1:N]
pass <- which(c>=max(b))
if (length(pass) == 1) {
count <- count + 1
}
}
number[mm] <- count
}
number
}
bb <- f(100)
bb
[[46]]
NULL
[[47]]
NULL
[[48]]
NULL
[[49]]
NULL
[[50]]
[1] 26
Если код работает правильно, ожидаемые ответы для [46], [47], [48] и [49] должны быть 20+, а не NULL.Я считаю, что код для number[mm] <- count
работает не так, как задумано.Я считаю, что number[mm]
не успешно передается в окончательный код number
, за исключением number[50]
, который передается правильно.