使用递归函数并且不使用任何循环显示素数(c ++)的代码

时间:2013-01-18 14:07:12

标签: c++

这一切都在标题中 简单地说我写了这个。

#include <iostream>
using namespace std;  
int main()  
{ 
    int a,i;  
    cout<<"Enter a number: ";  
    cin>>a;  
    for (i=2;i<=a/2;i++)  
    {  
        if (a%i==0)  
        {  
            cout<<"Its not Prime Number.";  
           system ("pause");  
            return 0;  
        }  
    }  
    cout<<"Its a Prime number.";  
    system ("pause");  
    }   

主要的是没有使用循环和递归函数。

3 个答案:

答案 0 :(得分:2)

你主要想看看你的for循环体是一个以“int i”为参数的函数。然后在函数开头对i&lt; = a / 2进行测试,并在其末尾调用“function(i + 1)”。

答案 1 :(得分:0)

这是一个递归素性测试函数:

int test_prime(unsigned n, unsigned d)
{
    if (n < 2) {
        return 0;
    }

    if (d == 1) {
        return 1;
    } else {
        if (n % d == 0) {
            return 0;
        } else {
            return test_prime(n, d - 1);
        }
    }
}

使用它像:

unsigned n;
std::cin >> n;
std::cout << (test_prime(n, n / 2) ? "prime" : "not prime") << "\n";

答案 2 :(得分:0)

这是一个基于递归的解决方案,如果提供了编译时常量值,它也可以在编译时执行计算

constexpr bool check_divisibility(int i, int j)
{
    return (j == 1) ? false : 
           ((i % j == 0) ? true : check_divisibility(i, j - 1));
}

constexpr bool is_prime(int i) { return !check_divisibility(i, i / 2); }

以下是在客户端代码中使用它的方法:

#include <iostream>

using namespace std;

int main()
{
    static_assert(is_prime(11), "Error!"); // Computed at compile-time
    int x = 15;
    cout << is_prime(x); // Computed at run-time
}