gpt4 book ai didi

使用递归函数确定数字是否为素数的 C 程序

转载 作者:行者123 更新时间:2023-11-30 20:29:23 24 4
gpt4 key购买 nike

我尝试创建的程序应该打印从键盘扫描的数字是否为素数。程序应使用递归函数来确定数字是否为素数。我创建的程序没有编译问题。然而,当main()函数调用判断数字是否为素数的函数时(我称这个函数为isprime),它似乎返回从键盘扫描到的整数总是素数。对于质数和非质数都是如此。我创建的程序如下所示:

#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 直接插入到函数的参数中是否正确?

感谢任何帮助!:)

最佳答案

以下建议代码:

  1. 干净地编译
  2. 执行所需的功能
  3. 检查并处理 I/O 错误
  4. 纳入对 OP 问题的评论
  5. 为了便于计算,颠倒了返回值 0 或 1 的含义
  6. 正确实现递归算法,包括边缘情况和停止条件
  7. 可以通过利用“n”的 sqrt 作为参数“i”的限制因素来极大地限制递归深度
  8. 使用“无符号”值来避免负数的复杂性

现在,建议的代码:

#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 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com