如何使用在C中使用数组作为参数的函数进行递归?

时间:2017-02-26 03:24:27

标签: c arrays recursion

我想做简单的递归来打印数组中的所有元素。但是我得到了像3 5116816 2 -1114130 16812392 1820204365这样的随机奇怪的结果。 这是我使用的代码:

#include <stdio.h>

int print(int array[],int size) {
  if(size>=0) {
    printf(" %d",array[size]);
    return print(array[6],size-1);
  }
}

int main() {

  int arr[]={1,4,6,9,0,3};
  print(arr,5);

return 0;
}

2 个答案:

答案 0 :(得分:2)

只需将您的函数中的array[size]更改为array

即可

代码[打印到最后一个]:

#include <stdio.h>

int print(int array[],int size) {
  if(size>0) { // changed this too
    printf(" %d",array[size-1]);
    return print(array,size-1); // note this carefully.
  }
}

int main() {

  int arr[]={1,4,6,9,0,3};
  print(arr, sizeof(arr)/sizeof(int)); // changed to correct size [sizeof is generic than just mentioning in the size]

return 0;
}

代码[从头到尾打印]

#include <stdio.h>

int print(int array[],int size) {
  if(size>0) { // changed this too
    print(array,size-1); // note this carefully.
    printf(" %d",array[size-1]);
    }
}

int main() {

  int arr[]={1,4,6,9,0,3};
  print(arr, sizeof(arr)/sizeof(int)); // changed to correct size [sizeof is generic than just mentioning in the size]

  return 0;
}
根据OP的要求,解释它的工作原理。

数学解释: 设print (arr,size)为将0打印到size数组的函数。 现在是print(arr,size+1) print(arr,size); printf(arr[size]) 现在再看一遍代码。

直观地说,如果您从头到尾打印,则必须先打印下部元素,最后打印最高元素。

如果您看到原始代码,则先打印第n个元素,然后再反转打印。

答案 1 :(得分:1)

您的代码似乎很好。唯一的问题是,在函数的递归调用期间,你传递数组元素而不是数组,并且它打印垃圾值,因为它指的是其他一些内存位置,即 array [6] ,这是未定义的< / p>

在上面的代码段中,

return print(array[6],size-1);

将此更改为

return print(array,size-1);