【发布时间】:2020-07-03 01:23:35
【问题描述】:
我是 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);
}
编辑 我想我已经正确地修改了代码以递归进行主要因素检查
//Recursive
if(i*i<=N){
N%i==0; lowestPrimeFactor(i);
}
else return i;
只需要尝试调整 bool 部分也可以递归
【问题讨论】:
-
'我不确定在我的答案上下文中这种方法是迭代的还是递归的。'如果这是您的问题,那么答案是迭代的。需要在lowestPrimeFactor() 内部调用lowestPrimeFactor() 才能使其递归。
-
好的,谢谢,我试图将这个 'for' 语句更改为带有 'return i' 的 'if' 但我无法让条件起作用,你的意思是 return 语句如果是这样的话,应该调用最低的Primefactor()。
-
我刚刚意识到我没有在代码之外指定我的问题,抱歉,您认为这是我卡住的地方是正确的。
-
我还没有深入了解对最低PrimeFactor() 的调用应该去哪里。我只是说在某处这样的调用是递归编程的决定性质量。
标签: c++ recursion prime-factoring