0

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

#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)
{

任何帮助,将不胜感激!

4

3 回答 3

1

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

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

您必须传递另一个变量。

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

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

main(m, n)

也许是一个整数。

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

于 2013-11-11T02:17:13.793 回答
1

对此的逻辑应该是“将 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);
    }
}
于 2016-04-29T03:56:44.840 回答
0
   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;
 }
于 2016-10-19T17:33:50.520 回答