我有一个查询,
我已经实现了函数func(a,b),它返回了a + b的结果,现在我想用最小的函数调用来计算24a + 36b
感谢您的回复
没有其他操作员或任何移位器只有这个功能可用
答案 0 :(得分:1)
// do the 12*(2*a + 3*b) as per Thomas Matthews comment
ab = func(a,b);
a2b2 = func(ab,ab);
a2b3 = func(a2b2,b);
k2_a2b3 = func(a2b3,a2b3);
k4_a2b3 = func(k2_a2b3,k2_a2b3);
k8_a2b3 = func(k4_a2b3,k4_a2b3);
r = func(k8_a2b3,k4_a2b3);
如果你不能将中间结果存储到其他变量中,那么替换变量应该非常接近最佳变量,尽管由于某些原因我不能确定 最佳。 (正如我不是100%确定这是变量的最佳解决方案,只有99%肯定)
只是为了它的乐趣,被替换的func
被称为59次:
return func(func(func(func(func(func(func(a,b),func(a,b)),b),func(func(func(a,b),func(a,b) )),b)),func(func(func(func(a,b),func(a,b)),b),func(func(func(a,b),func(a,b)), b))),func(func(func(func(func(a,b),func(a,b)),b),func(func(func(a,b),func(a,b)), b)),func(func(func(func(a,b),func(a,b)),b),func(func(func(a,b),func(a,b)),b)) )),func(func(func(func(func(a,b),func(a,b)),b),func(func(func(a,b),func(a,b)),b) ),func(func(func(func(a,b),func(a,b)),b),func(func(func(a,b),func(a,b)),b)))) ;
答案 1 :(得分:0)
如果你想加24乘以a和36乘以b,你可以在调用函数时直接进行乘法。所以你可以写:
func(24*a, 36*b);