請問一下通過循環實現一到一百想加和通過遞歸實現 堆棧變化有什麼區別呢
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum += i;
}
int caculate(int i) {
if (i == 0)
return 0;
else
return i + caculate(i - 1);
}
你好,上邊是兩種方式代碼的實現。首先,程序運行後,代碼都會被加載到內存的某片內存區域中,在for循環中,是沒有棧操作的,對於i從1到100的變化,i是被放到寄存器中進行保存的,沒執行完一次結構體,寄存器中i++,cpu指針會再次指到到for代碼內存起點處,繼續執行,如此反復100邊,當i到達上限100後,寄存器會捨棄i循環完畢。而對於遞歸,相信就比較簡單了,肯定是要使用棧操作的,從100加到1的99次遞歸過程中,是一個不斷的帶參數入棧過程,當i=0時,程序開始返回,又是一個不斷出棧的過程。總體來說,遞歸比for循環需要更多內存來進行操作。以上就是我的一些解答,都是以前上匯編課程時學習的。如果還是不理解,建議去學習一下匯編基礎知識。