如果你要反覆這樣做,你會怎麼做呢?我假設是這樣的:
void getss(int array[], int size) {
int i;
for (i = 0; i < size; i++) {
scanf("%d", array[i]);
}
}
我們i
那裏只是用來通過數組來算我們的方式,所以如果我們改變我們的功能略有我們可以擺脫它:
void getss(int* array, int size) {
for (; size > 0; size--, array++) {
scanf("%d", array);
}
}
現在我們的「counter」是size變量本身,而不是在我們的數組中索引,我們只是繼續前進我們的指針。
現在,這是一個完美的形式被轉化爲遞歸函數。
void getss(int* array, int size) {
if (size > 0) {
scanf("%d", array);
getss(array + 1, size - 1);
}
}
所以,我們的循環的終止條件已經進入一個if
和代替array++
和size--
我們array+1
傳:與其size--
和array++
我們可以在函數結束時通過新的值到另一個調用getss
和size-1
到我們的下一個電話。它實現了與循環相同的結果,但沒有顯式的循環結構。
這不起作用?它在哪裏失敗? – sarnold 2011-12-24 08:47:31
其他人的背景信息:http://stackoverflow.com/q/8623471/377270 - 是的,這幾乎是重複的,但是問題應該從開始的位置「遷移」多遠?到目前爲止我看起來很好...... – sarnold 2011-12-24 08:48:19
它不起作用,因爲'我'是未申報的。應該改爲'size'。但即使如此,'array [0]'永遠不會被寫入。 – Jens 2011-12-24 08:52:04