我在嘗試使用遞歸執行反向數組時遇到了一些問題。下面是函數原型:在C編程中遞歸的反向數組
void rReverseAr(int ar[ ], int size);
這裏是我的代碼:
int main()
{
int ar[10], size, i;
printf("Enter array size: ");
scanf("%d", &size);
printf("Enter %d numbers: ", size);
for (i = 0; i<size; i++)
scanf("%d", &ar[i]);
rReverseAr(ar, size);
printf("rReverseAr(): ");
for (i = 0; i<size; i++)
printf("%d ", ar[i]);
return 0;
}
void rReverseAr(int ar[], int size) {
int start = 0, end = size - 1, temp;
if (start < end) {
temp = ar[start];
ar[start] = ar[end];
ar[end] = temp;
start++;
end--;
rReverseAr(ar, size - 1);
}
}
預期結果應該是,當用戶輸入1 2 3
,它應該返回3 2 1
。但是,通過這些代碼,我得到的輸出是2 3 1
。
任何想法?
好吧,非常感謝!有用!但是,我是否可以知道爲什麼每次遞歸都會增加數組元素的位置,並且同時您將數組大小減少2?我的意思是像+1和-2如何限制陣列從後面收縮? – hyperfkcb
@Denise每次遞歸調用都會將「子數組」傳遞到下一級。該子數組在初始元素之後(即,在指針算術語法中的'ar + 1'處,或者在數組索引語法中'&ar [1]')開始一個元素。子數組的大小比原始數組的大小小2,因爲初始和最後一個元素已經被處理。 – dasblinkenlight
我明白了。非常感謝您的幫助! – hyperfkcb