Пожалуйста, кто-нибудь может помочь мне с рекурсивной функцией для поиска LCM массива из int. Вызов функции будет: int LCM(int * arr, int length){}
Пожалуйста, кто-нибудь может мне помочь.Рекурсивная функция для LCM в C++ с использованием нескольких номеров
ответ
int lcm(int a,int b){
static int temp = 1;
if(temp % b == 0 && temp % a == 0)
return temp;
temp++;
lcm(a,b);
return temp;
}
Как бы я тогда преобразовать это так, чтобы он принял массив ints, где есть? – user3832668
Вы отметили это как C++. Вот один из возможных способов C++, как это сделать, с std :: vector.
class T435_t
{
private:
std::vector<int> iVec;
void show(std::string label)
{
std::cout << label << std::endl;
for (auto iv : iVec)
std::cout << " iVec " << std::setw(6) << iv << std::endl;
std::cout << std::endl;
}
public:
T435_t() // : std::vector<int> iVec - default ctor ok
{
}
~T435_t() { }
int exec()
{
// test data
iVec.push_back(5);
iVec.push_back(10);
iVec.push_back(15);
iVec.push_back(20);
iVec.push_back(25);
show("\n ---- ---");
int retVal = LCM(1); // start tmp at 1
std::cout << " LCM " << std::setw(6) << retVal << std::endl;
return(0);
}
private:
inline bool componentOf (int tmp)
{
size_t count = 0;
for (auto iv : iVec)
{
if (0 == (tmp % iv))
++count; // how many elements of vec are component
}
return (count == iVec.size()); // when all are
}
// recursion
int LCM(int tmp)
{
if (componentOf(tmp)) // recursion termination clause
return (tmp);
return (LCM (++tmp)); // probably tail recursion with -O3
}
};
int main(int argc, char* argv[])
{
std::cout << "argc: " << argc << std::endl;
for (int i=0; i<argc; i+=1) std::cout << argv[i] << " ";
std::cout << std::endl;
setlocale(LC_ALL, "");
std::ios::sync_with_stdio(false);
T435_t t435; // C++ uses classes!
int retVal = t435.exec();
std::cout << "\nFINI " << std::endl;
return(retVal);
}
Выход:
---- ---
iVec 5
iVec 10
iVec 15
iVec 20
iVec 25
LCM 300
Вывод с 5 и 6 закодирована в iVec
---- ---
iVec 5
iVec 6
LCM 30
Обратите внимание, как использование вектора упрощает код ... подсчитывает и вставляет индекс, все позаботились о вас. –
Обратите внимание, что использование вектора и «for (auto iv: iVec)» упрощает сканирование содержимого iVec, как для «show()», так и для метода «componentOf()». –
Обратите внимание на то, как рекурсивный код «LCM()» имеет полный доступ к любому атрибуту данных класса ... например, мне не нужно было передавать «массив» ptr и длину через рекурсию, LCM() просто обращался к экземпляры iVec. Мне также не нужно было пропускать «tmp» через рекурсию, но я подумал, что это больше похоже на нее. –
Да, все они будут натуральные числа подсчета. – user3832668