求C语言仅用加法实现两数相乘的递归函数(代码需修正)
递归乘法函数的修正方案
你写的函数问题出在递归返回时没有累加当前的num2,乘法的本质是重复加法,比如mult(2,5)其实是5 + 5,也就是5 + mult(1,5),而mult(1,5)是5 + mult(0,5),mult(0,5)返回0,这样才能得到正确结果。
修正后的代码如下:
int mult(unsigned int num1, int num2) { if (num1 == 0) return 0; // 每次递归把num2累加,同时让num1减1,直到num1为0 return num2 + mult(num1 - 1, num2); }
举个例子走一遍逻辑:
mult(2,5)→ 返回5 + mult(1,5)mult(1,5)→ 返回5 + mult(0,5)mult(0,5)→ 返回0- 最终计算就是5+5+0=10,符合预期。
另外这个逻辑也支持num2为负数的情况,比如mult(3,-2)会返回-2 + (-2) + (-2) + 0 = -6,和实际乘积一致。
内容的提问来源于stack exchange,提问作者Gabbensa
相关产品推荐
相关产品推荐

