C 为什么我的程序在尝试使用递归时打印垃圾值?
我是编程新手,正在学习递归,我正在做本页的练习4 ,我试图在递归函数中的值“i”达到值“n”时打印数组的元素,但是一旦我运行程序,它就会打印垃圾值。我的问题是它为什么这样做?为什么不打印数组的值C 为什么我的程序在尝试使用递归时打印垃圾值?,c,recursion,C,Recursion,我是编程新手,正在学习递归,我正在做本页的练习4 ,我试图在递归函数中的值“i”达到值“n”时打印数组的元素,但是一旦我运行程序,它就会打印垃圾值。我的问题是它为什么这样做?为什么不打印数组的值 #include <stdio.h> #include <stdlib.h> void printr(int n,int i); int main (void) { printf("NUMBER OF ELEMENTS:\n");
#include <stdio.h>
#include <stdlib.h>
void printr(int n,int i);
int main (void)
{
printf("NUMBER OF ELEMENTS:\n");
int n;
scanf("%i",&n);
printr(n,0);
}
void printr(int n,int i)
{
int arr[n];
if (i == n)
{
for (int j = 0; j < n; j++)
{
printf("%d",arr[j]);
return;
}
}
printf("element %d :\n",i+1);
int e;
//scan for input
scanf("%d",&e);
//populate array
arr[i]=e;
//do it again
printr(n,i + 1);
}
#包括
#包括
无效打印器(整数n,整数i);
内部主(空)
{
printf(“元素数:\n”);
int n;
scanf(“%i”和“&n”);
printr(n,0);
}
无效打印器(整数n,整数i)
{
int-arr[n];
如果(i==n)
{
对于(int j=0;j
然后我通过将mein函数中定义的数组作为printr函数中的参数传递来解决这个问题
它成功了,但我不明白为什么我的第一次尝试没有成功
#include <stdio.h>
#include <stdlib.h>
void printr(int arr[],int n,int i);
int main (void)
{
printf("NUMBER OF ELEMENTS:\n");
int n;
scanf("%i",&n);
int arr[n];
printr(arr,n,0);
}
void printr(int arr[],int n,int i)
{
if (i == n)
{
for (int j = 0; j < n;j++)
{
printf("%d ",arr[j]);
}
printf("\n");
return;
}
printf("element %d :\n",i+1);
int e;
//scan for input
scanf("%d",&e);
//populate array
arr[i] = e;
//do it again
printr(arr,n,i + 1);
}
#包括
#包括
无效打印器(int arr[],int n,int i);
内部主(空)
{
printf(“元素数:\n”);
int n;
scanf(“%i”和“&n”);
int-arr[n];
printr(arr,n,0);
}
无效打印器(整数arr[],整数n,整数i)
{
如果(i==n)
{
对于(int j=0;j
谢谢大家! 因为basic C:printr的每次调用在堆栈上都有自己的
arr
,最初未初始化。您可以在不初始化的情况下打印它。当您打印出值时,它不会首先初始化。创建要打印的变量时,它指向内存中的某个位置。这个内存可能是由另一个程序释放的(因此它可以被抓取)。因此,它包含“垃圾”数据。处理此问题的方法是初始化您的值。为了避免将来出现类似情况,请养成习惯,在不初始化指针时将指针设置为
NULL
,以便程序在尝试读取未初始化的值时出错。打印前不初始化值。为什么这是递归的?这是一种倒退的做法。循环、填充,然后打印。这里的方法完全是扭曲和混乱的。每个递归调用都有自己的intarr[n]代码>。与从main
传递时不同,它们是单独的数组,不是共享的。@WeatherVane啊,我只是在看第二个数组。