252: return 0;
004020A8 xor eax,eax
253: }
004020AA pop edi
004020AB pop esi
004020AC pop ebx
004020AD mov esp,ebp
004020AF pop ebp
004020B0 ret
250: static int process()
251: {
00402090 push ebp
00402091 mov ebp,esp
00402093 sub esp,40h
00402096 push ebx
00402097 push esi
00402098 push edi
00402099 lea edi,[ebp-40h]
0040209C mov ecx,10h
004020A1 mov eax,0CCCCCCCCh
004020A6 rep stos dword ptr [edi]
252: return 0;
004020A8 xor eax,eax
253: }
004020AA pop edi
004020AB pop esi
004020AC pop ebx
004020AD mov esp,ebp
004020AF pop ebp
004020B0 ret
看的出来,这里才是真正的递归出口,到了这里之后,函数开始折返,这也就意外着我们的计算即将结束。所有的流程和递归非常相似。所以递归函数和模板递归的区别就是一点:递归函数是在代码执行的时候完成的,模板递归是在编译的时候完成的。
思考题:
自己编写一个阶乘的函数?尝试一下是否可以转变成递归函数?是否可以用模板类递归得到呢?