繁体   English   中英

在不使用模除的情况下通过递归计算模量

[英]Calculating modulus by recursion without using modulo division

我在为一个类项目的递归函数做一个问题。 我正在尝试编写一个程序,该程序使用递归函数来计算模数,而无需实际使用模数运算符。 我正在尝试使用参考参数,因为我认为这是执行此操作的最简单方法,但是我的程序无法正常运行。

//Michael Hery
//COP 2001
//11/15/2017
//Recursive Modulus

#include <iostream>
#include <iomanip>

using namespace std;

int recursiveMod(int &, int);

int main()
{
    int num;
    int den;
    int displayNum;
    int total;

    cout << "Please input the numerator (an integer) >> ";
    cin >> num;
    while (num < 0)
    {
        cout << "Integer must be greater than or equal to zero. >> ";
        cin >> num;
    }
    displayNum = num;
    cout << "Please input the denominator (an integer) >> ";
    cin >> den;
    while (den <= 0)
    {
        cout << "Integer must be greater than zero. >> ";
        cin >> den;
    }
    cout << "You have entered " << num << " % " << den << endl;

    total = recursiveMod(num, den);

    cout << "Modulus result: " << displayNum << " % " << den << " = " << total << endl;

    system("PAUSE");
    return 0;
}

int recursiveMod(int &num, int den)
{
    if (num == 0)
        return 0;

    num = num - den;

    if ((num - den) > den)
    {
        recursiveMod(num, den);
    }
    return num;
}

您的代码有两个错误。 首先,您需要包括cstdlib才能使system(“ pause”)正常工作。

#include <cstdlib>

其次,在你的

int recusive mod(int &num, int den)

条件应为num> den,并且必须放置return。

if (num > den)
    {
        return recursiveMod(num, den);
    }

问题是这一行:

 if ((num - den) > den)

例如,如果num是4而den是3,则4-3是1并且1不大于3,因此您将返回4。

 if (num > den)

尝试这个:

int recursiveMod(int num, int den)
{
    if (num < 0) return recursiveMod(num + den, den);

    // Don't forget the case of num = 2 and den = 7
    if (num < den) return num;

    return recursiveMod(num - den, den);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM