算法作业 约瑟夫非递归算法
设n=+l 其中0<l<,则结果为J(n)=2*l+1。[wikipedia]
N=1时显然成立。
设n=k时成立,仅证明k%4==1的情况,其他类似:
设k=4a+1
J(k)=2J(2a)+1=4J(a)-1
J(k+1)=2J(2a+1)-1=4J(a)+1
即J(k+1)-J(k)=2。
所以J(k+1)=2*+1
得证。
java实现
package gt.small;
public class Josephus {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int total = 2;
while (total < 16) {
int mask = 0x40000000;
while ((mask & total) == 0) {
mask >>>= 1;
}
int l = total - mask;
System.out.println(2 * l + 1);
++total;
}
}
}