求解5050问题的解法为什么递归返回不去了

#include"stdio.h"

int sum(int n)
{
return n&&(sum(n-1)+n)?sum(n-1)+n:0;
}

int main()
{
printf("%d\n",sum(100));
return 0;
}
求教为什么代码有问题

2个回答

return n == 0 ? 0 : sum(n - 1) + n;

caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 回复bugforevebugnowhere: 你难道没用三元运算符
大约 4 年之前 回复
ltyqljhwcm
GMFTBY 回复caozhy:题目不让用三元运算符和判断语句来求解,我的方法是这样的,但是没有语法错误啊,&&就是为了短路掉右边的语句
大约 4 年之前 回复
caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 回复bugforevebugnowhere: 你那么写纯属多此一举,而且&&符号的优先级高,和右边的表达式结合走了,导致实际上直接返回ture了。
大约 4 年之前 回复
ltyqljhwcm
GMFTBY 意思我懂,我想知道我上面的代码为什么会出现递归返回失败的问题
大约 4 年之前 回复

程序运行应该没有报错吧,估计是递归调用计算时间太久,把sum中的100换成10、20什么的还比较快,到27、28就要比较久的时间了。

qq_27587417
看得到你的人头 回复bugforevebugnowhere: 你把100换成10试试
大约 4 年之前 回复
ltyqljhwcm
GMFTBY 没有报错,调试运行正常,但是调试到返回的时候就卡住了
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐