2017-02-26 84 views
0

我想做簡單的遞歸來打印數組中的所有元素。但我得到了像3 5116816 2 -1114130 16812392 1820204365這樣的怪異結果。 這是我使用的代碼:如何做一個函數使用數組作爲參數在C中遞歸?

#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; 
} 
+1

傳遞元件陣列。改變這一點,並命令一切都應該罰款 – qwr

+1

如果所有推薦的警告被啓用,你應該得到一個編譯器警告。你爲什麼忽略它? – Olaf

回答

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打印到大小數組的功能。 現在print(arr,size+1)將是 print(arr,size); printf(arr[size]) 現在再次查看代碼。

直觀地說,如果您首先打印最後一頁,則必須先打印較低的元素,最後打印最高的元素。

如果看到原始代碼,則首先打印了第n個元素,然後是反向打印。

+1

是的,但他沒有提到第一個持續或最後到第一個。 –

+0

非常感謝你。 –

+0

UG_你能解釋一下關於從頭到尾打印數組的代碼嗎?這很酷,但我不明白代碼如何做到這一點。 –

1

你的代碼看起來不錯。只有它具有的問題是,你正在傳遞的數組元素的代替數組函數遞歸調用期間和打印不需要的值,因爲它是指一些其它存儲器位置即陣列[6]這是未定義

在上面的代碼片段,

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

改變這對

return print(array,size-1); 
相關問題