为了账号安全,请及时绑定邮箱和手机立即绑定

关于C++函数调用反向输出字符串的问题?

关于C++函数调用反向输出字符串的问题?

翻过高山走不出你 2019-02-06 09:06:59
关于C++函数调用反向输出字符串的问题
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

举个形象点的例子:输入12345.
输出.54321
这是一个递归函数,再次调用的时候,对程序而言,旧的reverse函数运行状态已经被保存在堆栈中了,因而局部变量ch不会被覆盖。就好像有六本一样的书,都叫reverse,第一本书上我写1,放到桌上,第二本同样的位置写2,放到第二本书上,此时,第二本上的2并不会覆盖第一本上的1。第三本写3,放到第二本...直至第五本。
第六本写上.

现在开始输出,把六本书一本本拿起,首先,我看到了第六本上的.,拿走第六本,然后看到第五本上的5,拿走,然后是第四本上的4,再拿走...最后拿走第一本拿走时我看到的顺序就是.54321
修改成'\n'会失败的原因是cin>>会自动忽略空白字符(' ','\t','\n'),所以程序永远无法获取'\n‘,这个放书的过程也永远不会结束。建议详细学习一下程序堆栈的原理,就好理解了,这里不好细讲。

查看完整回答
反对 回复 2019-03-21
?
12345678_0001

TA贡献1802条经验 获得超5个赞

递归的本质:递推->终止->回归
当输入的字符不为'.'的条件下,递归函数一直调用自身进行循环,每调用一次,函数就在栈中分配一个新的单元以保护现场,直到当输入'.'时,递归终止,开始往回释放栈空间,每释放一次,就输出一个字符。而栈的进出原则是先进后出,所以这就是为什么一个char字符能实现字符串的反向输出的原理。至于你说的为什么不用'\n’,只是因为'\n'是换行符,换行符是转义字符,而转义字符时无法从键盘输入的。

查看完整回答
反对 回复 2019-03-21
  • 2 回答
  • 0 关注
  • 674 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信