问题描述
#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,我无法空运行它并使其成为树形图
解决方法
您通过使执行到达函数定义的末尾而不在返回类型不是constructor(props) {
super(props);
this.state = {
supplier: {
_id: '',name: ''
}
};
this.handleUpdateForm = this.handleUpdateForm.bind(this);
}
componentDidUpdate(prevProps,prevState) {
const { supplier } = this.state;
if (prevState.supplier._id !== supplier._id) {
console.log('Supplier id changed');
}
}
handleUpdateForm(fieldsToUpdate,inputName,inputValue) {
let { supplier,suppliers } = this.state;
if (fieldsToUpdate === 'supplierFields') {
if (inputName === 'supplier_id') {
const selectedSupplier =
inputName === 'supplier_id'
? suppliers.find((supplier) => supplier._id === inputValue)
: null;
supplier = Object.assign(supplier,selectedSupplier);
} else {
supplier._id = inputName === 'name' ? '' : supplier._id;
supplier = Object.assign(supplier,{
[inputName]: inputValue
});
}
}
this.setState({
supplier
});
}
的函数中执行return
语句来调用未定义的行为。
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;
}
,
您的代码中的问题是您尚未定义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?