在C中使用递归来反转int数组

干杯

我在学校学习过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以防万一这是问题所在,但仍然无法正常工作。

谢谢你。

相互之间

R始终分配给NULL,而A不是指针,那么您正在编辑数组的实际数据。

如果要反转并创建一个新数组,则必须执行以下操作:

int *reverseArray(int array[], int arraySize) {
    int *reversedArray = malloc(sizeof(int) * arraySize);

    for ( int i = 0 ; i < arraySize ; ++i ) {
        reversedArray[i] = array[arraySize - i - 1];
    }
    return reversedArray;
}

您也可以递归的方式来做:

int   *reverseArray(int inputArray[], int arrayLength ) {

    int   *_reverseArray (int inputArray[], int arrayLength, int *outputArray, int actual) {

            if (outputArray == NULL) {
                outputArray = malloc(sizeof(int) * arrayLength);
            }
            if (actual < arrayLength) {
                outputArray[actual] = inputArray[arrayLength - actual - 1];
                return _reverseArray(inputArray, arrayLength, outputArray, ++actual);
            }
            return outputArray;

    }
    return _reverseArray(inputArray, arrayLength, NULL, 0);
}

如果要编辑原始数组:

void    reverseArray(int array[], int arraySize)
{
    for ( int i = 0 ; i < arraySize / 2 ; ++i ) {
        array[i] ^= array[arraySize - i - 1];
        array[arraySize - i - 1] ^= array[i];
        array[i] ^= array[arraySize - i - 1];
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中使用递归来反转整数数组?

来自分类Dev

如何在使用 C++ 的面向对象编程中使用递归来反转链表?

来自分类Dev

如何在C编程中使用递归来反转整数的顺序?

来自分类Dev

我在C语言中使用递归来反转字符串的方式

来自分类Dev

使用递归来反转python中的列表?

来自分类Dev

如何使用递归来反转数字

来自分类Dev

在javascript中使用递归来转动列表

来自分类Dev

如何使用递归来反转字符串?

来自分类Dev

使用递归来反转字符串的偶数索引

来自分类Dev

使用递归来反转字符串的偶数索引

来自分类Dev

Java如何使用递归来反转字符串

来自分类Dev

使用递归来围绕python中的值反转字典

来自分类Dev

C程序使用递归来反向堆栈

来自分类Dev

如何在JavaScript中使用递归来实现功能?

来自分类Dev

在math.pow中使用递归来计算Java的功效

来自分类Dev

使用递归来乘法数组中的元素

来自分类Dev

使用字符数组和递归来反转字符串,一些线程1:EXC_BAD_ACCESS错误

来自分类Dev

在 C++ 中使用递归反向数组

来自分类Dev

在Java中使用递归反转句子

来自分类Dev

使用递归反转Java中的数组

来自分类Dev

使用递归反转并打印出数组的内容

来自分类Dev

我正在尝试使用递归来反转堆栈。函数fun()中传递了什么?s是类堆栈的对象

来自分类Dev

如何使用递归来使用简单数组进行公式化

来自分类Dev

递归数组反转Javascript

来自分类Dev

如何在方案/球拍中使用尾部递归来实现附加过程?

来自分类Dev

如何仅通过在F#中使用递归来编写此函数?

来自分类Dev

在Elixir中使用模式匹配和递归来拆分列表

来自分类Dev

如何在方案/球拍中使用尾部递归来实现附加过程?

来自分类Dev

如何仅通过在F#中使用递归来编写此函数?

Related 相关文章

  1. 1

    如何在Java中使用递归来反转整数数组?

  2. 2

    如何在使用 C++ 的面向对象编程中使用递归来反转链表?

  3. 3

    如何在C编程中使用递归来反转整数的顺序?

  4. 4

    我在C语言中使用递归来反转字符串的方式

  5. 5

    使用递归来反转python中的列表?

  6. 6

    如何使用递归来反转数字

  7. 7

    在javascript中使用递归来转动列表

  8. 8

    如何使用递归来反转字符串?

  9. 9

    使用递归来反转字符串的偶数索引

  10. 10

    使用递归来反转字符串的偶数索引

  11. 11

    Java如何使用递归来反转字符串

  12. 12

    使用递归来围绕python中的值反转字典

  13. 13

    C程序使用递归来反向堆栈

  14. 14

    如何在JavaScript中使用递归来实现功能?

  15. 15

    在math.pow中使用递归来计算Java的功效

  16. 16

    使用递归来乘法数组中的元素

  17. 17

    使用字符数组和递归来反转字符串,一些线程1:EXC_BAD_ACCESS错误

  18. 18

    在 C++ 中使用递归反向数组

  19. 19

    在Java中使用递归反转句子

  20. 20

    使用递归反转Java中的数组

  21. 21

    使用递归反转并打印出数组的内容

  22. 22

    我正在尝试使用递归来反转堆栈。函数fun()中传递了什么?s是类堆栈的对象

  23. 23

    如何使用递归来使用简单数组进行公式化

  24. 24

    递归数组反转Javascript

  25. 25

    如何在方案/球拍中使用尾部递归来实现附加过程?

  26. 26

    如何仅通过在F#中使用递归来编写此函数?

  27. 27

    在Elixir中使用模式匹配和递归来拆分列表

  28. 28

    如何在方案/球拍中使用尾部递归来实现附加过程?

  29. 29

    如何仅通过在F#中使用递归来编写此函数?

热门标签

归档