私は学校で 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() の結果を取得する他の方法はありますか? それが問題だった場合に備えて、* r を malloc しようとしましたが、それでも機能しませんでした。
ありがとうございました。