这道题结果为什么是-610,怎么算出来的?

#include"stdio.h"voidf(intn){if(n<0){putchar('-');n=-n;}f(n/10)f(n/10);putchar(n%10+'... #include "stdio.h"
void f(int n)
{if(n<0)
{putchar('-');
n=-n;
}
f(n/10)
f(n/10);
putchar(n%10+'0');
}
void main()
{
f(-610);
}
f(n/10)
f(n/10);
改为
if(n/10)
f(n/10);
展开
 我来答
小雨学姐MN
2018-05-17
知道答主
回答量:11
采纳率:0%
帮助的人:6052
展开全部
这题涉及递归问题
第一步在main 函数中调用f(-610);
因为-610<0,所以输出-;n=-n,所以n此时为610;
再判断if(n/10) (当n/10!=0时,执行发f(n/10))
成立,调用f(n/10);也就是f(61);
因为61>0,不满足第一个if语句,再进行if(n/10)判断;
成立,调用f(n/10)),也就是f(6);
因为6>0,不满足第一个if语句,再进行if(n/10)判断;
不成立,此时不调用f(n/10);
再执行输出语句putchar(n%10+'0');
先输出第一次调用函数时输出的-;
再输出n=6时,putchar(n%10+'0');则为6;
再输出n=61时,putchar(n%10+'0');则为1;
再输出n=610时,putchar(n%10+'0');则为0;
所以 结果为-610;
风若远去何人留
2014-04-09 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450136
专业C/C++软件开发

向TA提问 私信TA
展开全部

递归调用f 并处理整型参数 如为负数 则输出‘-’ 并转为正数;每次调用结尾输出该次参数的个位数字符

对于-610执行过程为

f(-610)
为负数输出 '-'
    f(61)//610/10
        f(6)//61/10
        输出6
    输出61%10+‘0’ 即1
输出610%10+'0' 即0

于是最终输出-610

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式