数字的递归划分

时间:2011-09-05 12:39:28

标签: c++ numbers

我有以下代码用递归方式将一个数字除以另一个数字:

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

但不幸的是我的回答是零。你看到了什么问题吗?

4 个答案:

答案 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,因此您应将其定义为输入参数(通过引用调用)或使其成为全局(不推荐)并且不将其设置为零,只需在递归函数调用之前设置它。