俄罗斯农民繁殖
问题内容:
问题答案:
可以通过添加空格,适当的缩进和适当的函数体来改进它:
int peasant_mult (int a, int b) {
for (p = 0;
p += (a & 1) * b, a != 1;
a /= 2, b *= 2);
return p;}
看到?现在很清楚如何for
使用声明的三个部分。请记住,程序主要是为人眼编写的。不可读的代码始终是错误的代码。
现在,为了个人娱乐,我使用了尾递归版本:
(defun peasant-mult(ab&optional(sum 0))
“返回a和b的乘积,
通过农民的繁殖来实现。”
(如果(= a 1)
(+ b总和)
(农mul(地板(/ a 2))
(* b 2)
(+和(* b(对数a 1))))))