簡體   English   中英

以相反的順序打印數組

[英]Printing array in reverse order

我有以下源代碼,您將在下面找到。 我很難理解如何將printArray函數中的最后兩行與打印數組的相反順序互換。

有問題的行:

printf("%d", arr[n-1]);
printArray(n-1, arr);

是否有人可以向我解釋這一點。

#include <stdio.h>

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

int main(void){

    int array[7]= {1,2,3,4,5,6,7}, n=7;
    printArray(n, x);

    return 0;
}

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

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

讓我們來看看吧。

您從main調用printArrayn等於 7。

printArray函數將71進行比較; 它們不相等,所以它打印arr[6] ,然后調用printArray( 6, arr )

在下一次調用中, printArray61進行比較:它們不相等,因此它打印arr[5] ,然后調用printArray( 5, arr )

等等。 壓縮它,我們得到:

printArray( 5, array ):
  printf( "%d", arr[4] );
  printArray( 4, arr ):
    printf( "%d", arr[3] );
    printArray( 3, arr ):
      printf( "%d", arr[2] );
      printArray( 2, arr ):
        ...

等等。 最終,當n為 1 時, printArray打印arr[0]並且我們一路返回調用鏈。 因此,數組的元素以相反的順序打印出來(數組本身不受影響)。

如果您顛倒調用順序

printArray( n-1, arr );
printf( "%d", arr[n-1] );

那么調用鏈如下所示:

printArray( 5, arr ):
  printArray( 4, arr ):
    printArray( 3, arr ):
      printArray( 2, arr ):
        printArray( 1, arr ):
          printf( "%d", array[0] );
        printf( "%d", array[1] );
      printf( "%d", array[2] );
      ...

等等。這次我們按正常順序打印出數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM