c语言自定义函数返回值错误,求助

intjc(intn){if(n!=0){printf("%d-%d\n",jcjg,n);jcjg=jcjg*n;jc(n-1);}returnjcjg;}******... int jc(int n)
{
if(n != 0)
{
printf("%d-%d\n",jcjg,n);
jcjg = jcjg * n;
jc(n - 1);
}
return jcjg;
}
************带上else************

int jc(int n)
{
if(n != 0)
{
printf("%d-%d\n",jcjg,n);
jcjg = jcjg * n;
jc(n - 1);
}
else
{
return jcjg;
}
}

jcjg是全局变量。
一开始用的判断else语句,但答案错误,发现else语句被递归语句短路了。于是把else语句去掉。直接用return试试。这样答案正确了!后来仔细一想,在递归过程中,return其实也被短路了,但又两种情况的结果不同?谢谢
展开
 我来答
_whales
2013-01-10 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:487万
展开全部
有 else 是
只有 n == 0 return jcjg;返回jcjg 否则不确定返回何值(实际返回 eax 寄存器的最后一次值)
没有 else 任何时候 return jcjg;总是会返回jcjg。
不过没见过这样用递归的,
像这种简单计算,正常都是用迭代处理,不用递归的;
只有像树一类的复杂的数据结构,和排序或更复杂的算法,才用递归实现.
int jc(int n)
{
if(n != 0)
{
printf("%d-%d\n",jcjg,n);
jcjg = jcjg * n;
//jc(n - 1);改成
return jc(n - 1);看行不行;
}
else
{
return jcjg;
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式