我想做简单的递归来打印数组中的所有元素。但是我得到了像3 5116816 2 -1114130 16812392 1820204365
这样的随机奇怪的结果。
这是我使用的代码:
#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;
}
答案 0 :(得分: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打印到size数组的函数。
现在是print(arr,size+1)
print(arr,size); printf(arr[size])
现在再看一遍代码。
直观地说,如果您从头到尾打印,则必须先打印下部元素,最后打印最高元素。
如果您看到原始代码,则先打印第n个元素,然后再反转打印。
答案 1 :(得分:1)
您的代码似乎很好。唯一的问题是,在函数的递归调用期间,你传递数组元素而不是数组,并且它打印垃圾值,因为它指的是其他一些内存位置,即 array [6] ,这是未定义的< / p>
在上面的代码段中,
return print(array[6],size-1);
将此更改为
return print(array,size-1);