以下递归josephus problem可以是solved:
josephus(n, k) = (josephus(n - 1, k) + k-1) % n + 1
josephus(1, k) = 1
如何推导出这种递归关系?
答案 0 :(得分:1)
这一段就足够来自维基百科..
当索引从1开始时,那个s的人就从 第一个人在位((s-1)\ bmod n)+1,其中n是总数 人数。设f(n,k)表示幸存者的位置。 在第k个人被杀之后,我们留下了一个n-1圈,并且 我们开始下一个计数与原始人数 问题是(k \ bmod n)+1。幸存者在中国的地位 如果我们从1开始计数,剩余的圆将是f(n-1,k); 转移这个以解释我们从(k \ bmod。)开始的事实 n)+1产生复发
f(n,k)=((f(n-1,k)+k-1) \bmod n)+1,\text{ with }f(1,k)=1\,,
答案 1 :(得分:1)
josephus(n,k)=(josephus(n - 1,k)+ k-1)%n + 1 ......(1)
用简单的话说 - 从公式中的“+1”开始。这意味着已经完成了1次重复迭代。现在,我们将留下n-1个人/元素。我们需要以k的间隔递归地处理n-1个元素。但是,现在,由于要移除的最后一个元素位于第k个位置,我们将从中继续。因此,k-1增加了。此外,这种添加可能会扰乱数组的索引。因此%n完成了将数组索引保持在边界内。 希望它清晰而精致:)。