通过递归将两个数相乘
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;
}
}
#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;
}
}