递归算法分析
拿上一篇的二叉樹釋放做例子
call指令會將此指令的下一行指令的地址進行壓棧(調用完要返回)
然后修改eip跳到對應的地址
(其實就是跳會函數頭部)
第三次進call的時后root == 0了執行return;
return 后要平衡堆棧,然后ret
ret指令 == pop eip 因為剛才call 會將下一行地址壓棧現在彈棧eip返回去
到右子樹了
call進去后回來又得call左子樹
call倆次后root== 0又返回
剛call了左,棧頂元素是左的下一行地址
右
root==0返回
ret 會到右的下一行地址
開始釋放
返回左子樹下一行
以此類推。。。。。。
直到棧中 左右子樹call時壓棧時的地址耗光才能返回原調用函數
總結