我在哪里可以找到Recaman序列的递归算法?所有发布的算法都是迭代类型的。语言并不重要。Recaman的序列递归算法
-1
A
回答
1
这里是在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)
+1
不错,但是这是否算作递归算法,在全局列表上运行?至少我会发现它更加优雅地传递数组(或引用它)作为额外的参数。 –
0
在方案您可以使用
(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))))
计算系列。这是递归的(但效率低下,非常不雅观)。
0
我个人觉得这个问题本身很有趣。
首先,一个纯粹的(即无副作用)在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)(如Python中的set
)中,更高级的版本将使用此操作的单独累加器。
OEIS在哈斯克尔,可读性很强这样一个版本,但同样不是尾递归(由于莱因哈德Zumkeller,2011年3月14日):
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. 递归计算序列
- 3. 递归算法
- 4. 尾递归算法归并
- 5. 递归序列化方法
- 6. 递归排序算法的决策树
- 7. 递归算法树
- 8. 加速递归行列式算法
- 9. 排序与重复算法与递归
- 10. 快速排序算法(递归)
- 11. 预算行程的递归算法
- 12. 递归序列的迭代方法
- 13. 序言 - 递归计算
- 14. 递归算法伪代码
- 15. Matlab NQueens算法递归
- 16. 递归爬楼梯算法
- 17. 建立从递归算法
- 18. 运行递归算法
- 19. 我需要递归算法
- 20. 调试递归算法
- 21. 算法递归公式
- 22. 如何给递归算法
- 23. Karatsuba算法太多递归
- 24. 复杂递归算法
- 25. 算法/递归树挑战
- 26. 递归词搜索算法
- 27. Java MergeSort算法递归
- 28. 用递归算法中
- 29. SIGSEGV与递归算法
- 30. MiniMax递归算法(Python)
下面是你应该用它来改善典型澄清的问题你题。你想做什么?你有什么尝试?为什么它需要递归而不是迭代?为什么不能将迭代算法自己转换为递归算法?为什么你需要代码,但是语言是不可知的?因此,这个问题太广泛了,所以我会标记它,除非/编辑它以澄清和改进问题 –
我同意Kevin Wells,但我仍然觉得这个话题非常有趣。这里的困难在于递归规则依赖于序列中的所有以前的数字。 –