我有一個任務來創建 2 個函式來計算 GCD 和 LCM。但我注意到我的第二個函式不管用什么計算都不起作用。我究竟做錯了什么 ?
#include <iostream>
using namespace std;
int gcd(int number1,int number2);
int lcm(int number1,int number2);
int main()
{
int number1;
int number2;
cout<<"enter number 1: ";
cin>>number1;
cout<<"enter number 2: ";
cin>>number2;
cout<<"The GCD of "<<number1<<" and "<<number2<<" is "<<gcd(number1,number2)<<endl;
cout<<"The LCM of "<<number1<<" and "<<number2<<" is "<<lcm(number1,number2)<<endl;
return 0;
}
int gcd(int number1,int number2)
{
if (number2==0)
return number1;
return gcd(number2,number1 % number2);
}
int lcm(int number1,int number2)
{
return lcm(number2, number1 * number2)/gcd(number1,number2);
}
輸出:
enter number 1: 44 enter number 2: 121 The GCD of 44 and 121 is 11 The LCM of 44 and 121 is Process returned -1073741571 (0xC00000FD)
uj5u.com熱心網友回復:
問題出在lcm()函式內部:
int lcm(int number1,int number2)
{
return lcm(number2, number1 * number2)/gcd(number1,number2);
}
這個函式將是一個無限遞回,因為沒有基本情況。最終,具有諷刺意味的是,您將遇到堆疊溢位問題。
看看函式的性質,我想你的意思是:
int lcm(int number1, int number2)
{
return number1 * number2 / gcd(number1, number2);
}
uj5u.com熱心網友回復:
我相信這就是您想要在您的功能中做的事情嗎?
#include <iostream> using namespace std; int gcd(int number1,int number2); int lcm(int number1,int number2); int main() { int number1; int number2; cout<<"enter number 1: "; cin>>number1; cout<<"enter number 2: "; cin>>number2; cout<<"The GCD of "<<number1<<" and "<<number2<<" is "<<gcd(number1,number2)<<endl; cout<<"The LCM of "<<number1<<" and "<<number2<<" is "<<lcm(number1,number2)<<endl; return 0; } int gcd(int number1,int number2) { if (number2==0) return number1; return gcd(number2,number1 % number2); } int lcm(int number1,int number2) { int lcmResult=number1 * number2/gcd(number1,number2); return lcmResult; }
我得到的輸出是:
enter number 1: 44 enter number 2: 121 The GCD of 44 and 121 is 44 The LCM of 44 and 121 is 121
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383773.html
上一篇:在這種情況下,我的return陳述句如何在python中不省略數字0
下一篇:需要幫助組合類、活動和選擇器之前
