带&符号的递归调用函数

时间:2017-10-19 14:03:56

标签: c arrays recursion

我应该如何插入下面的代码? &arr[1]完全抛弃了我。我刚开始认为我正在接受递归。说n = 7。然后,它将首先打印arr[6],然后打印printArray(6, &arr[1])printf ("%d", arr[6-1]) 它会重复n>0

但是第二个元素的地址如何影响这个递归。

void printArray(int n, int arr[]){

    if(n>0){
          printf("%d", arr[0]);
          printArray(n-1, &arr[1]);
    }

}

2 个答案:

答案 0 :(得分:2)

您发布的版本只是每次都会继续打印最后一个元素,因为在每次重复调用时它会(a)减少计数,(b)调整arr以指向数组中的下一个元素。

这是一个将按顺序打印整个数组的版本:

void printArray(int n, int arr[])
{
    if (n > 0) {
        printf("%d", arr[0]);
        printArray(n-1, &arr[1]);
    }
}

或者,您可以先递归:

void printArray(int n, int arr[])
{
    if (n > 0) {
        printArray(n-1, arr);
        printf("%d", arr[n-1]);
    }
}

我使用了与示例中相同的格式说明符,但请注意,使用此格式的一个元素与下一个元素之间没有分隔。您可能希望在末尾添加空格或换行符。

答案 1 :(得分:0)

C中的数组只是指针。 &arr[1]是指向数组中第二项的指针。