通过递归将两个数相乘

Multiply two numbers through recurssion

 #include<iostream>
using namespace std;
int multiply (int num1, int num2){

if (num1 > 0)

  return num2 + multiply(num1-1,num2);


}

int main(){

int mult = multiply(5,6);
cout<<mult;
}

我试图通过递归将两个数字相乘,但我没有得到想要的结果,我想打印 30 但它给了我 36,我无法干燥 运行 它并使它成为树状图

您正在调用未定义的行为,方法是让执行到达函数定义的末尾,而不是在 return 类型不是 [ 的函数中执行 return 语句=13=].

 #include<iostream>
using namespace std;
int multiply (int num1, int num2){

if (num1 > 0)

  return num2 + multiply(num1-1,num2);

return 0; // add this
}

int main(){

int mult = multiply(5,6);
cout<<mult;
}

注意:缩进看起来很糟糕,但我尊重原始代码。可读:

#include <iostream>

int multiply (int num1, int num2)
{
    if (num1 > 0)
        return num2 + multiply(num1 - 1, num2);
    return 0;
}
    
int main()
{
    std::cout << multiply(5, 6) << '\n';
}

您的代码中的问题是您没有定义当 num1 变为零时会发生什么。您也必须在递归函数中定义这种情况。

#include<iostream>

int multiply (int num1, int num2)
{
    
    if (num1 > 0)
        return num2 + multiply(num1 - 1, num2);

    if(num1 <= 0) // or if (num1 == 0) or simply return 0; as pointed out by MikeCAT's answer
        return 0;
}
    
int main()
{
    std::cout << multiply(5, 6);
}

又见这个问题:Why is “using namespace std;” considered bad practice?

此代码适用于那些在 JAVA.

中寻找相同逻辑的人
    import java.util.*;

    public class Main {

      public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        int n = scn.nextInt();
        int m = scn.nextInt();
        int prod = multiplier(n, m);
        System.out.println(prod);
      }

      public static int multiplier(int n, int m) {
        if(m == 0) {
          return 0;
        }
        int nm1 = multiplier(n, m-1);
        int product = n + nm1;
        return product;
      }
    }