如何防止迴圈無限遞迴;以及強化各域變數的範圍觀念

迴圈無限遞迴是一個未定義的行為,在無限循環中會因為記憶體耗盡而出現舞法預期的莊況,所以我們在函式呼叫函式時(尤其是呼叫自身),要注意是否會發生無限遞迴的情形。
#include<stdio.h>
int f(int);

int main(){
printf("%d\n",f(0));
return 0;
}
int f(int i){
printf("*\n");
if(i==2){
return i;
}
return f(i+1);
}

當主程式呼叫f函式時,f函式會進行其內容,在f涵式中呼叫另一個f函示,直到因為我們設定的條件判斷而一個一個遞迴(i==2),在此範例中每一個函示所使用的i是不同的,每個i僅僅屬於自身函式的i(因為不是全域變數),所以函式與函式之間其實就是把需要傳遞的數值回傳到呼叫方所指定的執行內容(此範例為執行printf命令)。

留言