hanyf 发表于 2024-1-5 22:25:46

n的阶乘

#include <stdio.h>
int main()
{
        int n, val;
        scanf_s("%d",&n);
        val = fac(n);
        printf("%d", val);
}
int fac(int x)
{
        int val;
        if (x < 0)
        {
                printf("error,n<0");
                return -1;
        }
        if (x == 0 || x == 1)
                val = 1;
        if (x > 1)
                val = fac(x - 1) * x;
        return val;
}
上面的程序中为什么要return -1, 是什么意思?

FishC 发表于 2024-1-5 22:26:07

你好!你的程序中调用了一个未定义的函数fac(x),因此无法通过编译。实际上,计算n的阶乘可以使用递归或循环两种方法来实现。下面是两种方法的代码示例:

1. 使用递归方法计算n的阶乘:

#include <stdio.h>

int fac(int n) {
    if (n == 0 || n == 1) {
      return 1;
    } else {
      return n * fac(n-1);
    }
}

int main() {
    int n, val;
    printf("请输入一个正整数:");
    scanf("%d", &n);
    val = fac(n);
    printf("%d的阶乘为:%d\n", n, val);
    return 0;
}

2. 使用循环方法计算n的阶乘:

#include <stdio.h>

int main() {
    int n, val = 1;
    printf("请输入一个正整数:");
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
      val *= i;
    }
    printf("%d的阶乘为:%d\n", n, val);
    return 0;
}

希望这个回答能够帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2024-1-5 22:28:27

x<0代表这个数是负数,返回值就是-1,`return -1`通常用于表示函数在执行过程中遇到了错误或异常情况,因此不能正常完成任务。根据程序开发的一般惯例,这被视为函数失败的一种指示。在使用`return`语句结束函数时,如果返回的是非零整数(如0或其他正整数),那么函数通常会认为执行是正常的。相反,如果返回的是`-1`,那么就表明函数没有正确执行或无法完成请求的任务。

jackz007 发表于 2024-1-5 22:46:58

本帖最后由 jackz007 于 2024-1-5 22:48 编辑

       程序限定负数不能阶乘。

luohao06 发表于 2024-1-6 08:28:51

当输入的数字n小于0时,程序会输出错误信息并返回-1。这是为了表示在这种情况下发生了错误。通常,函数的返回值用于指示函数执行的结果,而-1通常被用作错误代码或错误指示符。

在这个程序中,fac函数负责计算阶乘。当输入的数字小于0时,阶乘是无意义的,因为阶乘只定义在非负整数上。因此,为了表明函数无法计算输入的负数的阶乘,选择了返回-1,以作为错误的标志。在主函数中,如果fac函数返回-1,程序会输出错误消息并结束。

实际上,返回-1作为错误代码的做法是一种常见的约定,但也可以选择其他任何适当的负数或特殊值来表示错误。
页: [1]
查看完整版本: n的阶乘