俄式乘法,又被称为俄国农夫法,它是对两个正整数相乘的非主流算法。假设m和n是两个正整数,我们要计算它们的积。它的主要原理如下:
如果 n is 偶数, 那么 n * m=n/2 * 2m
否则 n is 奇数, 那么 n * m=n/2 * 2m + m。
如果用递归实现, 非常简洁明了。
1, 如果n=1, 直接返回结果m, 递归结束;
2, 如果n是偶数,则直接递归调用russian_mult(n/2, m*2)
3, 如果n是奇数, 则直接递归调用m+russian_mult(n/2, m*2),
n/2直接取整数,因此少加一个m,在返回值这里加回去。
int russian_mult(int n, int m)
{
if (n == 1) return m; //递归出口
if (n % 2 == 0) //偶数情形
return russian_mult(n / 2, m * 2);
else //奇数情形
return m+russian_mult(n / 2, m * 2);
}