2017-02-26 3 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

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

変更この、コードスニペットの上に、あなたは配列に要素を渡します。それを変更し、すべてを整えるようにしてください。 – qwr

+1

推奨されるすべての警告が有効になっている場合は、コンパイラの警告が表示されます。なぜあなたはそれを無視するのですか? – Olaf

答えて

2

ジャストコード[最初に、最後印刷する] array

にあなたの関数でarray[size]を変更:

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

コード[第1〜第印刷します最後]

#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

あなたのコードは良さそうです。配列の要素を再帰的に呼び出す際に、配列の代わりに配列の要素を渡していて、別のメモリ位置を参照しているので、ガベージ値を出力します。つまり、配列は[0125]

return print(array,size-1); 
関連する問題