C语言中仅使用递归函数和增量进行乘法
所以,对于我的赋值,我应该编写一个函数,它接受两个无符号参数并输出它们的乘积C语言中仅使用递归函数和增量进行乘法,c,recursion,C,Recursion,所以,对于我的赋值,我应该编写一个函数,它接受两个无符号参数并输出它们的乘积 unsigned multiply( unsigned a, unsigned b ); 比如说, multiply(3, 4) 应该返回12 问题是,我不允许使用+、-、/、*、或%运算符。我只允许调用函数,并使用++和--递增/递减 我已经创建了另一个函数来添加2个参数: unsigned add(unsigned a, unsigned b) { if (a > 0) add(-
unsigned multiply( unsigned a, unsigned b );
比如说,
multiply(3, 4)
应该返回12
问题是,我不允许使用+、-、/、*、或%运算符。我只允许调用函数,并使用++和--递增/递减
我已经创建了另一个函数来添加2个参数:
unsigned add(unsigned a, unsigned b)
{
if (a > 0)
add(--a, ++b);
else return(b);
}
我可以调用它,以及我需要的任何助手函数
在过去的30分钟里,我一直在尝试各种排列方式,但我就是搞不好数学;我最接近的方法是让b自身翻倍a倍,但这并不能减少它。有什么想法吗
编辑:忘了提了!For/while循环也不允许我没有编译它,但我确信它能工作
mutiply(3, 4, 0)
int mutiply(int a, int b, int result) {
if(a > 0) {
for(int i=1;i<=b;i++)
result++
mutiply(--a, b, result);
} else return (result == 0 && a == 0) ? 0 : result;
}
multiply(3,4,0)
整数倍(整数a、整数b、整数结果){
如果(a>0){
对于(inti=1;iintmultiply)(inta,intb)
{
int结果=0;
对于(inti=0;i
当然,如果递归性是强制性的,这将不起作用。这里有一个尾部递归解决方案,它使用带有累加器的辅助函数。这基本上与使用嵌套进行
循环的解决方案相同:
unsigned add(unsigned a, unsigned b){
if (a > 0)
return add(--a, ++b);
else
return b;
}
unsigned multiply( unsigned a, unsigned b ){
if( a > 0)
return add(b, multiply(--a, b));
else
return 0;
}
unsigned multiply(unsigned a, unsigned b)
{
return mult_helper(a, b, 0, a);
}
unsigned mult_helper(unsigned a, unsigned b, unsigned acc, unsigned reset)
{
if (b == 0)
return acc;
if (a > 0)
return mult_helper(--a, b, ++acc, reset);
return mult_helper(reset, --b, acc, reset);
}
multiply(3,4)
与int multiply(int a,int b,int result)
是不同的签名。
是的,我忘了提到,它必须是递归的,因为循环是不允许的!我不得不将第二个(a>0)改为(a>1),但这很好!谢谢你,在这种情况下,乘法(0,5)
的结果会怎么样?
unsigned multiply(unsigned a, unsigned b)
{
return mult_helper(a, b, 0, a);
}
unsigned mult_helper(unsigned a, unsigned b, unsigned acc, unsigned reset)
{
if (b == 0)
return acc;
if (a > 0)
return mult_helper(--a, b, ++acc, reset);
return mult_helper(reset, --b, acc, reset);
}