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(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!
解决方案
在这条线上:
return N + sum_of_N_with_recursion(N--);
您在同一个表达式中读取N
和写入的值,N
两者之间没有序列点。试图这样做是未定义的行为。
您实际上不需要更改N
此处的值。您只想传入 value N-1
,所以改为:
return N + sum_of_N_with_recursion(N-1);
推荐阅读
- android - Android房间没有正确删除缓存
- ios - 导航栏中的灰色背景,在推送期间将 searchController 添加到 navigationItem
- docker - 创建 windows docker 映像时如何选择基本 windows 映像?
- angular - How to resize div block with touch and move?
- perl - qw 关键字的 Emacs 缩进问题
- android - 如何移动到元素并在暴民应用程序中按下
- c# - 我应该安装哪些库才能在基于 Alpine 的图像中的 ASP NET Core 应用程序中使用 System.Drawing.Common
- r - 在R中提取子字符串
- c++ - 使用 MINGW64 在 Windows 上编译 Inkscape 源代码时缺少包
- python-3.x - Microsoft Speech to Text Python SDK SPXERR_INVALID_HEADER 问题