[英]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.