[问题] C递回将阵列内容反向输出

楼主: x93939512 (ARIA)   2017-10-29 17:47:38
最近刚学C语言 学到了递回的部分
在网络上看到了将阵列内容反向输出的范例
https://pastebin.com/uv3rij55
想请问为什么那个递回副程式可以反向输出
我的想法 当主程式invert(0)呼叫副程式后
一开始j=0所以小于6进到if
结果又碰到invert(j+1) 又呼叫了一次开始递回
这次变成j=1 依照这样下去当j=6后就不满足if的条件 跳离递回
所以永远执行不到副程式的printf才对呀!
为什么这个程式执行的结果却能达到将list的内容反向?
希望可以解惑一下谢谢
作者: stupid0319 (征女友)   2017-10-29 17:51:00
j=6后就不再呼叫自己,所以开始脱离retn,呼叫printf?
作者: alan23273850   2017-10-29 18:00:00
请记得一个函式执行完毕之后一定会回来继续执行下一行,所以每次invert执行完毕之后,一定会继续往下走到printf,就这样并不是执行了新的invert之后就不管三七二十一把之前的context取代掉,要这样的效果可以,但不是初学者会接触到的内容行,另外我觉得应该把递回当成是function call func的一种特例,如果有 code unrolling (展开) 的概念会更清楚,像这张图 https://imgur.com/28K5WPM如果按照这张图的方法把所有的invert展开,应该就一目了然了!你就想function只不过就是把一段code压缩起来,像zip档那样子,要执行到的时候再展开BTW,我觉得这种写法蛮有创意的,但以这个问题来说这绝对不是好解法
作者: flowwinds (..)   2017-10-30 09:11:00
想成invert都分为两部分:第一个元素及array其他的部分invert第一个元素最后才印出, 所以先invert array其他部分?

Links booklink

Contact Us: admin [ a t ] ucptt.com