我在学校学过 C 语言,但我不擅长......当我尝试使用 C 语言实现这个算法时:
ReverseArray(int A[], int i, int j) {
Input: Array A, nonnegative integer indices i and j
Output: The reversal of the elements in A starting at index i and ending at j
if i < j then
swap A[i] and A[j]
ReverseArray(A, i+1, j-1)
}
我设法编写了这个代码:
int *reverseArray(int A[], int i, int j) {
int *R = NULL;
if(i < j) {
int temp = A[j];
A[j] = A[i];
A[i] = temp;
R = reverseArray(A, i+1, j-1);
return R;
} else {
return R;
}
}
但是当我尝试在主中打印原始和反向数组时:
int main(void) {
int A[] = {1, 3, 5, 6, 8, 3, 4, 2};
int *r = reverseArray(A, 0, 7);
//This prints out the reversed array, when I intended to print the original
for (size_t i = 0; i < 8; i++) {
printf("%d ", A[i]);
}
printf("\n");
/* This was intended to print the reversed array but doesn't work
for (size_t i = 0; i < 8; i++) {
printf("%d ", r[i]);
}
*/
return 0;
}
谁能解释一下为什么注释掉的 for 循环不起作用?以及为什么第一个 for 循环会打印出反转的数组...有没有其他方法可以在不使用 *r 的情况下获得 reverseArray() 的结果?我试图 malloc *r 以防万一这是问题,但它仍然没有用。
谢谢你。