【问题标题】:Multiply two numbers through recurssion通过递归将两个数字相乘
【发布时间】:2020-09-03 04:41:14
【问题描述】:
 #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,我无法空运行它并使其成为树形图

【问题讨论】:

  • 在编译器中启用所有警告应该可以非常准确地了解问题所在。

标签: c++ function recursion multiplication recursive-backtracking


【解决方案1】:

您正在调用未定义的行为,方法是让执行到达函数定义的末尾,而不在返回类型不是 void 的函数中执行 return 语句。

 #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';
}

【讨论】:

    【解决方案2】:

    您的代码中的问题是您没有定义当 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?

    【讨论】:

      【解决方案3】:

      此代码适用于那些在 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;
            }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-18
        • 1970-01-01
        • 2022-07-28
        • 2018-07-16
        • 1970-01-01
        • 2010-12-24
        • 1970-01-01
        • 2018-05-09
        相关资源
        最近更新 更多