我应该如何插入下面的代码? &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]);
}
}
答案 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]
是指向数组中第二项的指针。