约瑟夫问题非递归

算法作业 约瑟夫非递归算法

n=+l 其中0<l<,则结果为Jn=2*l+1。[wikipedia]

N=1时显然成立。

n=k时成立,仅证明k%4==1的情况,其他类似:

k=4a+1

Jk=2J2a+1=4Ja-1

Jk+1=2J2a+1-1=4Ja+1

Jk+1-Jk=2

所以Jk+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;
		}
	}
}


 
 

你可能感兴趣的:(约瑟夫问题非递归)