Где можно найти рекурсивный алгоритм для последовательности Recaman? Все опубликованные алгоритмы имеют итеративный тип. Язык не важен.Рекурсивный алгоритм последовательности recaman
ответ
Вот решение в Python:
def rec(x):
if x == 1:
list.append(x)
return x
else:
a = rec(x-1)
am = a - x
ap = a + x
if am > 0 and am not in list:
list.append(am)
return am
else:
list.append(ap)
return ap
list=[]
return rec(x)
Приятно, но считает ли это рекурсивным алгоритмом, действующим в глобальном списке? По крайней мере, я бы счел более элегантным передать массив (или ссылку на него) в качестве дополнительного аргумента. –
В схеме можно использовать
(define (inseq seq n m)
(cond
((= 0 n) #f)
(else (or (= m (seq n)) (inseq seq (- n 1) m)))))
(define (lower n)
(- (rec (- n 1)) n))
(define (higher n)
(+ (rec (- n 1)) n))
(define (rec n)
(cond
((= 1 n) 1)
((and (> (lower n) 0) (not (inseq rec (- n 1) (lower n)))) (lower n))
(else (higher n))))
вычислить ряд. Это рекурсивный (но неэффективный и очень неэлегантный), как написано.
Я лично считаю этот вопрос очень интересный сам по себе.
Во-первыхи, чистый (т.е. без побочных эффектов) рекурсивная реализация в Python:
def recaman_sequence(n):
def recurs(seen, i, term):
if i > n:
return []
elif term > i and term - i not in seen:
return [term - i] + recurs(seen.union({term - i}), i + 1, term - i)
else:
return [term + i] + recurs(seen.union({term + i}), i + 1, term + i)
return recurs(set(), 1, 0)
В языке с оптимизацией хвостового вызова, как OCaml, быстрее реализацией может быть по этим направлениям:
Обратите внимание, что List.mem
- O (n). Более продвинутая версия будет использовать отдельный аккумулятор с этой операцией в O (log n) или O (1) (например, set
в Python).
OEIS имеет такую версию в Haskell, очень читаемый, но опять-таки не хвостовой рекурсией (из-за Reinhard Zumkeller, 14 марта 2011):
import Data.Set (Set, singleton, notMember, insert)
a005132 n = a005132_list !! n
a005132_list = 0 : recaman (singleton 0) 1 0 where
recaman :: Set Integer -> Integer -> Integer -> [Integer]
recaman s n x = if x > n && (x - n) `notMember` s
then (x-n) : recaman (insert (x-n) s) (n+1) (x-n)
else (x+n) : recaman (insert (x+n) s) (n+1) (x+n)
- 1. Рекурсивный алгоритм
- 2. Как правильно вернуть полученные последовательности в рекурсивный алгоритм F #
- 3. Рекурсивный Номер последовательности
- 4. RECAMAN ЗА 20132014th TERM
- 5. Оптимизация последовательности Фибоначчи генерирующего алгоритм
- 6. Как превратить рекурсивный алгоритм в хвостовой рекурсивный алгоритм?
- 7. Рекурсивный алгоритм сортировки слияния
- 8. Чтобы прописные рекурсивный алгоритм
- 9. Рекурсивный алгоритм заполнения наводнений
- 10. рекурсивный алгоритм ограниченного ранца
- 11. Рекурсивный алгоритм выходного дня
- 12. F # хитрым рекурсивный алгоритм
- 13. Рекурсивный алгоритм в итеративном
- 14. Рекурсивный алгоритм распределенных систем
- 15. рекурсивный алгоритм, использующий запоминанием
- 16. Простой рекурсивный алгоритм Java
- 17. Flood Fill Рекурсивный алгоритм
- 18. Неизвестный рекурсивный алгоритм
- 19. Java MergeSort Алгоритм рекурсивный
- 20. Рекурсивный алгоритм Sierpinsky pyramid
- 21. Рекурсивный алгоритм подъема лестницы
- 22. python рекурсивный алгоритм multiprocess
- 23. Рекурсивный алгоритм сортировочной станции
- 24. Рекурсивный кодовый подход к выравниванию последовательности
- 25. Рекурсивный метод для определенной последовательности
- 26. Двоичное дерево Алгоритм последовательности
- 27. Transform - алгоритм мутационной последовательности
- 28. Вставка алгоритм последовательности питон
- 29. алгоритм, перечисляющий последовательности
- 30. Алгоритм последовательности Фибоначчи
Вот типичные вопросы, уточняющие вы должны использовать, чтобы улучшить свои вопрос. Что ты пытаешься сделать? Что вы пробовали? Почему это необходимо для рекурсивного, а не для итеративного? Почему вы не можете просто преобразовать итеративный алгоритм в рекурсивный? Зачем вам нужен код, но язык агностик? Поэтому этот вопрос слишком широк, поэтому я буду отмечать его до тех пор, пока вы не отредактируете его, чтобы уточнить и улучшить вопрос. –
Я согласен с Кевином Уэллсом, но все же я нахожу тему очень интересной. Трудность здесь состоит в том, что правило рекурсии зависит от всех предыдущих чисел в последовательности. –