1. 程式人生 > >遞歸與堆棧

遞歸與堆棧

rtc urn 匯編 log blog 怎麽 stream sdn detail

#include<stdio.h>
#include<iostream>
int  fact(int n) {
    if (n == 1)
        return 1;
    return n * fact(n - 1);
}
int main()
{
    int a;
    std::cin >> a;
    fact(a);
    return 0;
}//記得我大一第一次學習C語言的時候,學到遞歸那點怎麽也想不明白,老師也不給講明白。不過如果
//能從反匯編的角度來看,可能會容易理解一下。
     8: int main()
     
9: { 01045320 55 push ebp 01045321 8B EC mov ebp,esp 01045323 81 EC D0 00 00 00 sub esp,0D0h 01045329 53 push ebx 0104532A 56 push esi 0104532B 57 push edi 0104532C 8D BD 30 FF FF FF lea
edi,[ebp-0D0h] 01045332 B9 34 00 00 00 mov ecx,34h 01045337 B8 CC CC CC CC mov eax,0CCCCCCCCh 0104533C F3 AB rep stos dword ptr es:[edi] 0104533E A1 00 F0 04 01 mov eax,dword ptr ds:[0104F000h] 01045343 33 C5 xor eax,ebp 01045345
89 45 FC mov dword ptr [ebp-4],eax 10: int a; 11: std::cin >> a; 01045348 8B F4 mov esi,esp 0104534A 8D 45 F4 lea eax,[a] 0104534D 50 push eax 0104534E 8B 0D 90 00 05 01 mov ecx,dword ptr ds:[1050090h] 01045354 FF 15 94 00 05 01 call dword ptr ds:[1050094h] 0104535A 3B F4 cmp esi,esp 0104535C E8 7E BF FF FF call __RTC_CheckEsp (010412DFh) 12: fact(a); 01045361 8B 45 F4 mov eax,dword ptr [a] 01045364 50 push eax 01045365 E8 FA BC FF FF call fact (01041064h) 0104536A 83 C4 04 add esp,4 13: return 0; 0104536D 33 C0 xor eax,eax

https://blog.csdn.net/zr_lang/article/details/39962679

遞歸與堆棧