Я пытаюсь создать функцию, которая может возвращать простые множители заданного числа в массиве (или множественном множестве, но я пытаюсь использовать массив).
Например, если я введу 12, я хочу получить 2, 2 и 3, а не 2 и 3, как в наборе. Это делается для того, чтобы я мог использовать их, чтобы узнать, является ли это число Смита или нет, поэтому мне нужны цифры отдельно.
Также я использую рекурсивный подход.
Я пытался (но безрезультатно) вернуть массив многими способами, включая передачу начального указателя в код, который указывает на место для хранения массива.
Я попытался просто инициализировать массив в функции, а затем вернуть его.
Из того, что я могу сказать, я могу получить массив из базовой итерации, а затем при попытке создать новый массив с размером oldArray+1
для копирования значений, все становится беспорядочным. Вот где я заблудился.
Из того, что я прочитал, хотя это не самая эффективная реализация, я должен быть в состоянии заставить ее работать.
У меня есть функция, nextPrime(int n)
, которая с учетом n
вернет следующее простое число от этого числа.
См. Источник ниже:
int* find(int n, int p) {
int root = (int) floor(sqrt(n));
if (p > root) {
// Base case, array gets initialized and returned
// depending on value of n and p.
if (n > 1) {
factors = new int[1];
factors[0] = n;
return factors;
}
else {
factors = new int[0];
return factors;
}
}
else
if (n%p == 0){
// Inductive step if p is a factor
int newFloor = (int) floor(n/p);
factors = find(newFloor, p);
// Initialize new array.
int* newFactors;
newFactors = new int[(sizeof(factors) / sizeof(int)) + 1];
// Add p to first slot, fill rest with contents of factors.
factors[0] = p;
for (int i = 0; i < (sizeof(factors) / sizeof(int)); i++) {
newFactors[i+1] = factors[i];
}
return newFactors;
}
else {
// Inductive step p isn't a factor of n
factors = find(n, factors, nextPrime(p));
return factors;
}
}
Как я уже сказал, ошибка в возврате массива и использовании его значения, но почему он возвращает OK с первой итерации?