我尝试创建的程序应打印从键盘扫描的数字是否为质数。该程序应使用递归函数来确定数字是否为质数。我创建的程序没有编译问题。但是,当main()函数调用用于确定数字是否为质数的函数(我称此函数为质数)时,似乎返回从键盘扫描的整数始终为质数。质数和非质数都是这种情况。我创建的程序如下所示:
#include <stdio.h>
//function for determining whether a number is prime or not
int isprime(int i, int n){
i = 2;
if(n > 1){
/* i = 2, i is the divisor that checks whether n (the number
being checked for being prime) is in fact prime */
if(n % i == 0){
return 1;
}
/* recursive step that returns function with increased value
of i */
isprime(i + 1, n);
}
else {
return 0;
}
return -1;
}
int main(){
int x;
//scans integer from the keyboard
scanf("%d", &x);
//calls recursive function
if(isprime(2, x) == 1){
printf("%d is prime\n", x);
}
if(isprime(2, x) == 0){
printf("%d is not prime\n", x);
}
return 0;
}
最后一个问题:正在像我的程序中那样调用递归函数:
isprime(2, x)
使用正确的语法?将数字2直接插入函数的参数是否正确?
任何帮助表示赞赏!:)
最佳答案
建议的代码如下:
干净地编译
执行所需的功能
检查并处理I / O错误
将评论纳入运营问题
为了便于计算,反转了返回值0或1的含义
正确实现一个递归算法,包括边缘情况和停止条件
通过使用“ n”的平方根作为参数“ i”的限制因素,可以极大地限制递归深度
使用“无符号”值来避免负数的复杂性
现在,建议的代码为:
#include <stdio.h>
#include <stdlib.h>
int isprime( unsigned i, unsigned n )
{
if( n < 2 )
{ // cannot be prime
return 1;
}
if( i >= n )
return 0;
if(n % i == 0)
{ // then, not prime
return 1;
}
return isprime(i + 1, n );
}
int main( void )
{
unsigned x;
if( scanf("%u", &x) != 1 )
{
fprintf( stderr, "scanf failed\n" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
if( !isprime(2, x ) )
{
printf("%d is prime\n", x);
}
else
{
printf("%d is not prime\n", x);
}
return 0;
}
关于c - C程序,使用递归函数确定数字是否为质数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58258626/