c++ 使用加法递归地乘以 2 个整数

c++ Recursively multiply 2 integers using addition

本文关键字:整数 递归 c++      更新时间:2023-10-16

我正在尝试编写使用递归和加法将两个整数相乘的家庭作业代码。但是,我目前收到很多错误消息,我什至不确定我是否走在正确的轨道上。而且,只是为了仔细检查,这是递归的,对吧?我为这个问题编写了另一个程序,效果很好,直到我意识到它实际上不是递归的。以下是完整代码:

#include <iostream>
#include <iomanip>
using namespace std;
int result;
int m;
int n;
int rmultiply(int m, int n)
{
    if(n > 1)
        return(m + (rmultiply(n - 1)));
    else if ((m == 0) || (n == 0))
        return 0;
    else if (n == 1)
        return m;
}
int main(m, n)
    {
    cout << "Enter two integers to multiply" << endl; //prompt user to input 2 integers
    cin >> m >> n; //store them in variable m and n
    result = rmultiply(m,n);
    cout << result;
    }

错误 1:参数太少,无法函数 'int rmultiply(int, int)'

return(m + (rmultiply(n - 1)));

警告:控制达到非无效功能结束

错误 2(对于下面的代码行):表达式列表在初始值设定项中被视为复合表达式

错误 3:在"{"标记之前出现预期的","或";"

警告:逗号运算符的左操作数不起作用

int main(m, n)
{

任何帮助将不胜感激!

当您在此行中再次调用函数时,

return(m + (rmultiply(n - 1)));

您必须传递另一个变量。

此外,将全局变量 m 和 n 命名为不同的名称也是一个好主意。它不会影响编程,而只是为了更好地理解。因为函数 rmultiply 中的 m 和 n 变量总是与全局 m 和 n 不同(除非通过引用传递)。

对于其他错误,请在行中定义一种变量类型,

main(m, n)

也许是整数。

并且,在main确保返回一个整数。因为在函数定义中,您有int main

这样做的逻辑应该是"将 a 添加到自身多达 b 次"。让我们以2 * 3为例。这可以减少到(3乘以2),即:2 + 2 + 2。下面应该是为此的代码实现。

int product(int a, int b)
{
    if( a ==0 || b == 0)
    {
       return 0;
    }
    if (b==1)
    {
        return a;
    }
    else
    {
        return a + product(a, b - 1);
    }
}
   int f(int x,int y)
  {
        if (y==0)
           return 0;
       int z=f(x,y/2);
         if (y % 2==0)
           return 2*z;
        else
           return x+2*z;
 }