任何人都可以告诉我如何使用递归编写乘法函数(在C
)?使用递归编码整数乘法函数(在C中)
回答
将它重复添加到自身N次。也就是说,如果你想用N乘以一个数..
你必须,如果你想很好的帮助是方式更加具体。但这里有一个在C递归函数相乘两个正整数:
int multiply(int multiplicand, int multiplier)
{
if(multiplier == 0)
{
return 0;
}
return multiply(multiplicand, multiplier - 1) + multiplicand;
}
乔纳森·莱弗勒写道:如果乘数为负?
确定:
int multiply(int multiplicand, int multiplier)
{
if(multiplier == 0)
{
return 0;
}
if(multiplier < 0)
{
return multiply(multiplicand, multiplier + 1) - multiplicand; //Edit: changed "+ multiplicand" to "- multplicand"
}
return multiply(multiplicand, multiplier - 1) + multiplicand;
}
马克拜尔斯说:负版本仍然是错误的。
抱怨,发牢骚。为我的记忆力而写作而无需测试。这个测试了许多整数范围,负值和正值,奇数和偶数。应该适用于任何整数值。 Merry Wintereenmas。
如果乘数是负数? – 2009-11-22 18:17:29
负面版本仍然是错误的。 – 2009-11-22 18:33:07
如果我没有错,是这样的...
int mul(int a, int b)
{
if(b==1)
return a;
else
return a+mul(a,b-1);
}
hm b <= 0 ;-) – 2009-11-23 08:27:19
OK,让我们的是原来的。 :)
unsigned int mul(unsigned int a, unsigned int b)
{
if (!a || !b) return 0;
if (a == 1) return b;
if (b == 1) return a;
return mul(a-1, b-1)+a+b-1;
}
替代版本:
int mulInner(int a, int b, int c)
{
if (b == 0)
return a*c;
return mulInner(a, b-1, c+1);
}
int mul(int a, int b)
{
return multInner(a, b, 0);
}
嘿,他没有说不要用operator*
...
额外的信贷:不支持负数! – shoosh 2009-11-22 18:22:49
如果你真的想打动你的同事和你的老师,提交 - 这是递归和快速!
int mul(int a, int b)
{
if (a < 0) return -mul(-a,b);
if (b < 0) return -mul(a,-b);
if (b == 0) return 0;
return (mul(a,b>>1)<<1)+(b&1?a:0);
}
添加:作为一个额外的好处是,这个正确处理二者阳性,阴性和0值。
优秀的答案,先生你可以解释伪代码背后的逻辑? – Madhan 2009-11-22 19:09:37
不是。 XD每当我给作业回答时,我要么用伪代码给它,给它不完整,要么给它如此扭曲和“聪明”,以致要求它的人没有机会解释它是如何工作的(如果他/她决定把它作为他/她自己)。 :) – 2009-11-22 19:34:07
嗯...看起来不像我伪造的代码。这看起来是一个相当正确的答案。弄清楚它是如何工作的,然后解释给你的老师。 – 2009-11-23 00:04:31
这只适用于第一个操作数大于零的情况,但至少它很短并且令人困惑。;)
int mul(int a, int b) {
return b + (--a ? mul(a, b) : 0);
}
但是,我不知道该评价顺序定义,所以你可能必须移动减量表达外:
int mul(int a, int b) {
a--;
return b + (a ? mul(a, b) : 0);
}
int mul(int a,int b)
{
if(b==1)
return a;
else
return(a+(mul(a,b-1)));
}
50个字符:
m(x,y){return!y?0:rand()%2?m(x,y+1)-x:m(x,y-1)+x;}
我确实希望我可以使用rand()
函数(特别是以这种方式)和一般syn税收优惠。根据你的系统库和月亮的相位,要注意的是,递归会导致参数值高的段错误,比如计算2 × 3
。
- 1. 编码递归函数
- 2. 阶乘函数递归
- 3. 递归阶乘函数
- 4. 递归函数乘以
- 5. 仅使用递归函数和递增乘以C
- 6. 在C中编写递归函数
- 7. 递归函数使用C#
- 8. 使用while循环在C中使用递归函数的阶乘程序c
- 9. 在C中使用递归函数#
- 10. C++和递归:函数整数到
- 11. 在while循环中使用递归函数的阶乘程序
- 12. 在C++中使用递归方法反转整数
- 13. 正整数乘法用C
- 14. C++递归函数
- 15. 递归函数C++
- 16. 递归函数用C
- 17. C中的递归函数#
- 18. 递归在C++函数
- 19. 在递归函数[C]
- 20. 递归函数中的Pow函数C++
- 21. 使用递归函数时避免字符串+整数加法
- 22. 使用递归函数的C中的指数函数
- 23. 乘法递归
- 24. 递归乘法
- 25. 整蛊递归函数
- 26. 递归素数函数C++
- 27. Prolog递归(功率函数的阶乘)
- 28. 简单的递归阶乘函数
- 29. 数组整数的递归函数
- 30. 在Oracle中编写递归函数SQL
请提供一些证据证明您至少已经尝试过这个问题。这不是一个家庭作业网站。我们在这里帮助,而不是为你做你的工作。 – 2009-11-22 18:10:21
2009年最不合适使用递归的优胜者。 – shoosh 2009-11-22 18:17:16