C++ 用于打印整数的素因子分解元素的递归函数
我需要编写一个递归函数来打印整数的素数分解元素,升序C++ 用于打印整数的素因子分解元素的递归函数,c++,recursion,C++,Recursion,我需要编写一个递归函数来打印整数的素数分解元素,升序 void printPrimeFactors(int num) { int div; if (isPrime(num) == true) cout << num << " "; else { for (div = 2; div < num; div++) { if (isPrime(div) == true && num%div == 0)
void printPrimeFactors(int num)
{
int div;
if (isPrime(num) == true)
cout << num << " ";
else
{
for (div = 2; div < num; div++)
{
if (isPrime(div) == true && num%div == 0)
printPrimeFactors(num/div);
}
}
我的最小输入是一个素数,递归函数的较小输入是
num div(num的最小素数除法器)
我相信以下方法会起作用:
void printPrimeFactors(int num, int div = 2)
{
if (num % div == 0) {
std::cout << div << " ";
printPrimeFactors(num / div, div);
} else if (div <= num) {
printPrimeFactors(num, div + 1);
}
}
void printPrimeFactors(int num,int div=2)
{
如果(num%div==0){
NPE提供了一个(尾部)递归版本,下面是迭代版本:
我们在这里所做的是:
我们第一个可能的除数是2。试试这个值
如果它将数字平均除以,则打印除数,并将目标数字除以该除数
如果它不除法,请尝试下一个除法。div+=1
请注意,当它进行除法时,我们不会增加div
。这是因为像20
这样的情况,其中2
将其多次除法
void printPrimeFactors(int num) {
int div = 2;
while (num != 1) {
if (num % div == 0) {
cout << num << " ";
num /= div;
} else {
div += 1;
}
}
}
void printPrimeFactors(int num){
int div=2;
while(num!=1){
如果(num%div==0){
你能看到什么让你认为你做错了什么吗?我的输出,20年,它是:5 2将其编辑到你的问题中。你不应该循环和重复。否则我怎么能找到除以num的最小素数?没有必要isPrime(div)
。如果div
不是素数,那么一些数字x
其中2因为它是我大学作业的一部分,我不允许在它工作时中断;
一个循环。@sharth它短路了对num%div==0
的检查。不过,它似乎不太可能对性能有实际好处,o当然,但只是为了扮演魔鬼代言人。@sharth:这是一个很好的观点,谢谢。我已经完全重做了解决方案。我相信新的解决方案会更好(而且正确!)@femtoRgon:我无法想象iPrime(div)
的成本接近num%div
isPrime
的成本将高出几个数量级。谢谢你,伙计,但我应该写一个递归函数。
void printPrimeFactors(int num) {
int div = 2;
while (num != 1) {
if (num % div == 0) {
cout << num << " ";
num /= div;
} else {
div += 1;
}
}
}