配列内の特定の数値の素因数を返す関数を作ろうとしていますが、配列を使用しようとしています。C++のint配列ポインタを素因数を見つけるために再帰的に返します
例えば、私が12に入れた場合、私は2と2と3を、2と3はセットと同じようにしたい。これは、私がそれがSmith numberであるかどうかを見るために使うことができるように、私は数字を別に必要とします。
また、私は再帰的アプローチを取っています。
私は配列を格納するスペースを指すコードに初期ポインタを渡すなど、多くの方法で配列を返そうとしました。
私は関数の配列を初期化してから、それを返してみました。
私は、基本ケースの反復から配列を戻すことができます。そして、値をコピーするためにサイズoldArray+1
の新しい配列を作成しようとすると、物事が乱雑になります。これは私が迷子になる場所です。
これは最も効率的な実装ではありませんが、私はそれを動作させることができるはずです。
私は、と与えられた関数nextPrime(int 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を返すように見えるのでしょうか?
ありがとうございました!!!私は両方の答えを見た後すぐに働いています。とても有難い。 – Blue42