递归除法

recursive divison of number

本文关键字:除法 递归      更新时间:2023-10-16

我有以下代码递归地除以另一个数字:

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

,但不幸的是我得到零作为答案。你看到哪里不对了吗?

Answer是一个局部变量。当您运行这段代码时,对divide的第一次调用将创建answer变量的实例,将其设置为0,然后将其增量为1。然后,当您再次递归地调用divide时,它会为answer变量创建一个全新的实例,将该实例设置为0,然后将该实例增加为1。

在对divide的最后调用中,它创建了一个全新的 answer变量的实例,将该实例设置为0,但由于现在number<=dividend它不增加它,它返回answer的实例,该实例为0。

if分支中,您正在增加answer,但返回一些不相关的内容(递归调用的结果)。我敢肯定,这不是你想要的。从这里开始。

您正在递归地运行以下代码:

if (number>dividend  || number==dividend ){
    answer+=1;
    return  divide(number-dividend,dividend);
}

但是一旦递归调用结束(即number < dividend),您将忽略if语句并且返回0;

你做 int answer=0; 在函数调用的开始,所以当if语句是错误的,它返回0所以你应该定义它作为输入参数(通过引用调用)或使其全局(不推荐),不要将其设置为零,只是设置它之前你的递归函数调用。