2011-03-27 105 views
4

我试图检查数字是否是素数(通过除以n以下的所有数字)。这是我的尝试:递归检查数是否是质数

bool isPrime(int n, int d){ 
    if (d == 1) 
     return true; 
    else{ 
     if (n % d == 0){ 
      return false; 
     } 
     else 
      return (n,d-1); 
    } 
} 

n - 检查它是否为素数的数字。 d - 低于n的数字,当调用函数n-1时。

请帮我弄清楚我做错了什么。

+2

一个不是素数。 – eomeroff 2013-04-09 14:30:50

回答

12

你不是递归调用你的函数。 return (n,d-1);应该是return isPrime(n,d-1);

3

请不要这样写!对于或多或少的正常输入,递归方法会把所有的堆积起来!只是去旧的好迭代方式。

当然,蛮力解决方案并不是最快的解决方案。你可以尝试Eratosthenes' sieve,或者一些more advanced tests

+0

是的,我只知道这个工作只有很少的数字,但是我只是为了学习递归。 – Marijus 2011-03-27 17:24:47

+2

任何理智的编译器都会优化尾递归到迭代中。 – fredoverflow 2011-03-27 17:28:12

+0

@Fred:除非标准保证,否则我不会依赖这一点。 – Vlad 2011-03-27 17:35:59

2

你只需要包含条件检查1,如果它是质数或不。

bool isPrime(int n, int d) 
{ 
    if(n<2) 
     return 0; 
    if(d == 1) 
     return true; 
    else 
    { 
     if(n % d == 0) 
      return false; 
     else 
      return isPrime(n, d - 1); 
    } 
} 
0
#include<iostream> 
using namespace std; 
bool findPrime(int x,int y); 
int main() 
{int n; 
cout<<"enter the number to be checked \n"; 
cin>>n; 
    int x=findPrime(n,n-1); 
    if(x==1) 
    cout<<"its a prime number"; 
    else 
    cout<<"its not prime"; 
} 
bool findPrime(int x,int y) 
{ 
    if(x%y==0&&y!=1) 
    { 
     return false; 
     } 
    else{ 
     if(y==1) 
     return true; 
    else 
     return findPrime(x,y-1); 
} 
}