用递归c++; 我是C++的新手,我被要求编写一个代码,它使用递归找到一个数字的最小素数。如果N小于2,则代码应返回1。如果N本身是素数,则代码应返回N。否则,代码应返回最小的素数因子N。我尝试过这个问题,但我使用了for循环来检查最低的素数因子,我不确定在我的答案中,该方法是迭代的还是递归的。要调用main函数,用户应输入lowestPrimeFactor(x);,其中x是他们想要找到的最小素数因子。我一直在尝试将迭代部分改为递归部分,其中代码检查最低的素数因子。如果有任何反馈,我将不胜感激 #include <stdio.h> #include <iostream> #include <math.h> long lowestPrimeFactor(long N, long i=2) { if(N<2){ //if N is less than 2, return 1 std::cout << 1; //print to screen to check return 1; } bool isPrime =true; //Check if number is prime for(i=2;i<=N/2; ++i){ if(N%i==0){ isPrime=false; break; } } if (isPrime){ std::cout<<N; return N; } for (int i = 3; i* i <= N; i+=2){ //This is where I am unsure how to translate to recursive as it is based of an iterative solution if(N%i == 0) std::cout<<i; return i; } //Driver code to check functionality int main(){ lowestPrimeFactor(19); } #包括 #包括 #包括 long lowestPrimeFactor(长N,长i=2){ 如果(N

用递归c++; 我是C++的新手,我被要求编写一个代码,它使用递归找到一个数字的最小素数。如果N小于2,则代码应返回1。如果N本身是素数,则代码应返回N。否则,代码应返回最小的素数因子N。我尝试过这个问题,但我使用了for循环来检查最低的素数因子,我不确定在我的答案中,该方法是迭代的还是递归的。要调用main函数,用户应输入lowestPrimeFactor(x);,其中x是他们想要找到的最小素数因子。我一直在尝试将迭代部分改为递归部分,其中代码检查最低的素数因子。如果有任何反馈,我将不胜感激 #include <stdio.h> #include <iostream> #include <math.h> long lowestPrimeFactor(long N, long i=2) { if(N<2){ //if N is less than 2, return 1 std::cout << 1; //print to screen to check return 1; } bool isPrime =true; //Check if number is prime for(i=2;i<=N/2; ++i){ if(N%i==0){ isPrime=false; break; } } if (isPrime){ std::cout<<N; return N; } for (int i = 3; i* i <= N; i+=2){ //This is where I am unsure how to translate to recursive as it is based of an iterative solution if(N%i == 0) std::cout<<i; return i; } //Driver code to check functionality int main(){ lowestPrimeFactor(19); } #包括 #包括 #包括 long lowestPrimeFactor(长N,长i=2){ 如果(N,c++,recursion,prime-factoring,C++,Recursion,Prime Factoring,所需的代码,如果要使用递归检查最低的素数因子而不是最后一个for循环,则如下所示: #include <iostream> long lowestPrimeFactor(long N,long pr = 3) { bool isPrime =true; if(N<2) { //if N is less than 2, return 1 std::cout << N << std::endl;//print to screen to check

所需的代码,如果要使用递归检查最低的素数因子而不是最后一个for循环,则如下所示:

#include <iostream>

long lowestPrimeFactor(long N,long pr = 3)
{
bool isPrime =true;
if(N<2)
{  //if N is less than 2, return 1
    std::cout << N << std::endl;//print to screen to check
    return 1;
}    
else
{
    for(long i=2;i<=N/2; ++i)
    {
        if(N%i==0)
        {
        isPrime=false;
        break;
        }
    }
}
if(isPrime)
{
    std::cout << N << std::endl;
    return N;
}
else
{
    if(N%2==0){
        std::cout << 2 << std::endl;
        return 2;
    }
    else
    {
        if(N%pr == 0)
        {
            std::cout << pr << std::endl;
            return pr;
        }
        else
        {
            return lowestPrimeFactor(N,pr+2);
        }    
    }
}
}

//Driver code to check functionality
int main()
{
lowestPrimeFactor(19);
lowestPrimeFactor(20);
lowestPrimeFactor(7);
lowestPrimeFactor(1);
lowestPrimeFactor(15);
}
#包括
long lowestPrimeFactor(长N,长pr=3)
{
bool isPrime=true;
如果(N试试这个:

#include <iostream>

using namespace std;

long lowestPrimeFactor(long N, long i = 2) {
    if (N % i == 0) // Test for factor
        return i;
    else if (i < N * N)
        return lowestPrimeFactor(N, i + 1); // Test next factor
    else
        return N;
}

void test(long N){
    // Format results
    cout << N << " gives " << lowestPrimeFactor(N) << endl;
}

int main() {
    for (long N = 2; N < 30; ++N)  // Generate some test cases
        test(N);
}
#包括
使用名称空间std;
long lowestPrimeFactor(长N,长i=2){
如果(N%i==0)//测试因子
返回i;
else if(i“我不确定我的答案中的这个方法是迭代的还是递归的。”如果这是你的问题,那么答案是迭代的。需要在LowestPrimeActor()中调用LowestPrimeActor()它本身就是递归的。好的,谢谢你,我试图将这个'for'语句更改为带有'return I'的'if',但我无法使条件起作用,你是说return语句应该是对LowestPrimeActor()的调用吗如果是这样的话。我只是意识到我没有指定我的问题在代码之外。很抱歉,你认为我的问题就在这里是正确的。我还没有深入了解到调用LowestPrimeActor()的具体位置应该走了。我只是说在某个地方这样的调用是递归编程的定义质量。如果从
I=3
开始,你可以跳过所有的even(
return lowestPrimeFactor(N,I+2)
,然后你只需将它包装在一个函数中,检查
N
是否为偶数,并返回
2
lowestPrimeFactor(N,3)
根据
N
的奇偶校验,您也有一个错误,
i
应该是
i
是的。实际上,i*i#include <iostream> using namespace std; long lowestPrimeFactor(long N, long i = 2) { if (N % i == 0) // Test for factor return i; else if (i < N * N) return lowestPrimeFactor(N, i + 1); // Test next factor else return N; } void test(long N){ // Format results cout << N << " gives " << lowestPrimeFactor(N) << endl; } int main() { for (long N = 2; N < 30; ++N) // Generate some test cases test(N); }