我有以下代码用递归方式将一个数字除以另一个数字:
#include <iostream>
using namespace std;
int divide(int number,int dividend){
int answer=0;
if (number>dividend || number==dividend ){
answer+=1;
return divide(number-dividend,dividend);
}
return answer;
}
int main(){
cout<<divide(20,5)<<endl;
return 0;
}
但不幸的是我的回答是零。你看到了什么问题吗?
答案 0 :(得分:2)
在if
分支中,您正在递增answer
但返回不相关的内容(递归调用的结果)。我相信,这不是你想要的。从那里开始。
答案 1 :(得分:2)
答案是一个局部变量。运行此代码时,第一次调用divide
会创建answer
变量的实例,将其设置为0,然后将其递增为1.然后,当您递归调用divide
时再次,它创建answer
变量的全新实例,将该实例设置为0,然后将该实例增加到1。
在对divide
的最后一次通话中,它会创建answer
变量的全新实例,将该实例设置为0,但从现在起number<=dividend
它不会递增它,并返回answer
的实例,即0。
答案 2 :(得分:1)
您以递归方式运行以下代码:
if (number>dividend || number==dividend ){
answer+=1;
return divide(number-dividend,dividend);
}
但是一旦递归调用结束(number < dividend
),你将忽略if语句而返回0 ;
答案 3 :(得分:1)
您在函数调用开始时执行 int answer=0;
,因此当if
语句错误时,它会返回0
,因此您应将其定义为输入参数(通过引用调用)或使其成为全局(不推荐)并且不将其设置为零,只需在递归函数调用之前设置它。