递归return问题

天之骄子呃 2014-11-23 05:43:46
下面是一道将整数从高位到低位输出的函数

void output3(int n)
{
if (n < 10)
{
cout << n << endl;
}
else
{
return output3(n / 10);//为什么前面加了return 就只能输出最高位 不能返回上层函数依次输出低位了呢?
cout << n % 10<< endl;
}
}
...全文
234 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bear234 2014-11-23
  • 打赏
  • 举报
回复
因为任何一个函数在任何地方碰到第一个return,该函数即刻终止并退出,不论后面有什么代码,都绝对不会执行
天之骄子呃 2014-11-23
  • 打赏
  • 举报
回复
引用 7 楼 luotuo44 的回复:
引用 4 楼 u014402634 的回复:
[quote=引用 3 楼 luotuo44 的回复:] 因为已经return了,从output3函数返回了。后面的输出没有执行。
这个return 不是返回到调用它的函数还是操作系统?如果返回上次调用它的函数那后面不应该还继续进行么?
返回调用它的函数。 楼主还是自己单步调试一下吧。一步步看其是怎么运行的。[/quote]嗯 单步调试了 确实返回上次调用的函数 但是返回之后函数直接结束了 把后面的cout跳过去了继续往上上层返回 这是为什么
luotuo44 2014-11-23
  • 打赏
  • 举报
回复
引用 4 楼 u014402634 的回复:
引用 3 楼 luotuo44 的回复:
因为已经return了,从output3函数返回了。后面的输出没有执行。
这个return 不是返回到调用它的函数还是操作系统?如果返回上次调用它的函数那后面不应该还继续进行么?
返回调用它的函数。 楼主还是自己单步调试一下吧。一步步看其是怎么运行的。
li4c 2014-11-23
  • 打赏
  • 举报
回复
#include<stdio.h>

void print_bit(unsigned int a)
{
	unsigned int tmp =1;
	int n;
	n = sizeof(unsigned int) * 8;
	for(int i = n - 1; i>=0; --i)
	{
		printf("%d",a&(1<<i));
	}
	printf("\n");
}

int main()
{
	unsigned int a;
	scanf("%u",&a);
	print_bit(a);
	//printf("%d",1<<31);
	return 0;
}
天之骄子呃 2014-11-23
  • 打赏
  • 举报
回复
引用 2 楼 u013122222 的回复:
return后面的一句cout << n % 10<< endl;就没有执行了吧?
这个return 不是返回到调用它的函数还是操作系统?如果返回上次调用它的函数那后面不应该还继续进行么?
天之骄子呃 2014-11-23
  • 打赏
  • 举报
回复
引用 3 楼 luotuo44 的回复:
因为已经return了,从output3函数返回了。后面的输出没有执行。
这个return 不是返回到调用它的函数还是操作系统?如果返回上次调用它的函数那后面不应该还继续进行么?
luotuo44 2014-11-23
  • 打赏
  • 举报
回复
因为已经return了,从output3函数返回了。后面的输出没有执行。
Aiross 2014-11-23
  • 打赏
  • 举报
回复
return后面的一句cout << n % 10<< endl;就没有执行了吧?
天之骄子呃 2014-11-23
  • 打赏
  • 举报
回复
为什么呢?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧