Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
作为参数递减c中的一个数字_C - Fatal编程技术网

作为参数递减c中的一个数字

作为参数递减c中的一个数字,c,C,注意:我是C语言世界的初学者。 我试图写一个程序来计算N个自然数的和。 这是: #include<stdio.h> int sum_of_N_with_recursion(int N); int main() { int n,result; do { printf("enter a natural number : "); scanf("%d",&n); if(

注意:我是C语言世界的初学者。 我试图写一个程序来计算N个自然数的和。 这是:

#include<stdio.h>

int sum_of_N_with_recursion(int N);

int main()
{
    int n,result;
    do
    {
        printf("enter a natural number : ");
        scanf("%d",&n);
        if(n<0)
        {
            printf("%d is not a natural number\n",n);
        }
    }while(n<0);
    result = sum_of_N_with_recursion(n);
    printf("sum of the first %d natural numbers is %d\n",n,result);    

    return 0;
}


int sum_of_N_with_recursion(int N)
{
    if(N==0)
    {
        return 0;
    }
    return  N + sum_of_N_with_recursion(N--);
}
#包括
具有递归的N的int和(int N);
int main()
{
int n,结果;
做
{
printf(“输入自然数:”);
scanf(“%d”和“&n”);
如果(n在这条线上:

return  N + sum_of_N_with_recursion(N--);
您正在读取
N
的值,并在同一表达式中写入
N
的值,中间没有序列点。尝试这样做是错误的

实际上,您不需要在此处更改
N
的值。您只需要传入值
N-1
,因此请执行以下操作:

return  N + sum_of_N_with_recursion(N-1);

阅读有关增量/减量和增量后C/减量的内容。此外,do/while循环应以
do
开头。Re:“您正在读取
N
的值,并在同一表达式中写入
N
的值,中间没有序列点”:这实际上是未知的。函数调用有一个序列点,可以在读取
N
之前排序,并且必须在修改
N
之后排序。但是调用也可以在读取之后排序;它是不确定的(不同于未排序)。在一种情况下,读取和修改是按顺序进行的。在另一种情况下,它们是不按顺序进行的。然后,行为是未定义的,因为有一条规则,即如果任何顺序产生未按顺序进行的交互,…则行为是未定义的,无论编译器选择哪个顺序。因此,结论是相同的,但所需的推理是complicated。我们还有其他问题涉及函数调用,其中不确定的序列即使多次修改表达式中的对象,也不会导致未定义的行为。@EricPostFischil谢谢!