#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,我无法运行它并绘制它的树形图
发布于 2020-09-03 04:42:48
您正在调用未定义的行为,方法是让执行到达函数定义的末尾,而不执行返回类型不是void
的函数中的void
语句。
#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';
}
发布于 2020-09-03 06:44:48
代码中的问题是,您还没有定义当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?
发布于 2022-02-22 18:43:09
这段代码是为那些在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;
}
}
https://stackoverflow.com/questions/63716974
复制相似问题