这个东西首先,你要确定递归出口。没有出口,你就算不出结果的。
从你给出的代码片段来看,出口应该是n==0,也就说rfcat(0)=1这样。
那么所谓的第一层到底哪里算第一层呢?
首先程序从主函数开始运行,系统建立了一个存储运行状态的栈。在系统堆栈的最下面,放进main记录。记录下从哪里进入的这个函数。
在运行到rfcat(5)这行时,进入这个rfcat函数。此时,n==5。系统栈里,压入rfcat记录。
然后在函数里,运行到ans=n*rfact(n-1)时,又遇到了rfcat这个函数,此时,将n-1带入了这个函数,“递归”调用函数。此时,又在系统栈里压入了一个rfcat记录。
就这样重复重复,直到发现出口。就是在n==0时,return了一个值,1。这时,这里的return,不仅是代表返回值,更是说在系统栈里的函数结束了,要返回上一个函数里运行。弹出这个记录的同时,得到了进入函数时程序的下一步该进行的动作。
然后就这样一步步的return。直到main的最后的return 0;结束整个程序。
执行顺序应该是 1*2*3*4*5,n=0时不再递归,然后层层返回