当我尝试使用递归来反转数组时遇到了一些问题。这是函数原型:
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
。有什么想法吗?
ar+1
,或在数组索引语法中为&ar[1]
)。子数组的大小比原始数组的大小小2,因为已经处理了初始和最后的元素。 - Sergey Kalinichenko