首页 > 解决方案 > 将 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(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--);
}

我的问题是什么?

当我尝试像这样减少sum_of_N_number()sum_of_N_number(N--)中的 N 时,它不起作用。为什么?

示例sum_of_N_number(3)应该等于6,但我得到了3

标签: c

解决方案


在这条线上:

return  N + sum_of_N_with_recursion(N--);

您在同一个表达式中读取N和写入的值,N两者之间没有序列点。试图这样做是未定义的行为

您实际上不需要更改N此处的值。您只想传入 value N-1,所以改为:

return  N + sum_of_N_with_recursion(N-1);

推荐阅读