【发布时间】:2020-12-01 04:28:43
【问题描述】:
我是编程新手,我正在学习递归,我正在从这个页面做练习 4 @ 987654321@,一旦递归函数中“i”的值达到“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);
}
然后我通过将 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[n];。与从main传递时不同,它们是单独的数组,不共享。 -
@WeatherVane 啊,我只看第二个。