又称俄国农夫法(Russian peasant method),
nm=(n/2)(2m)或nm=((n-1)/2)(2m)+m。
n为偶用前一个,奇用后一个。
到1*m=m时返回。
为什么要提这个算法呢,因为乘除2对计算机来说只是移位,这样速度就比较快了。我从来没有想过类似的方法,比较惊奇,所以记下来学习下。
时间效率O(log(n))。
下面是非递归的代码。
package fds;
public class NonRecursive {
public static int nonrecursive(int n,int m)
{
int sum=0;
while(n!=0)//我们把n==1的那一种情况一起加里面了
{
if((n&1)==1) sum+=m;
n/=2;
m*=2;
}
return sum;
}
public static void main(String[] args) {
System.out.println(nonrecursive(35243, 1985));
}
}