使用递归函数以反向顺序打印数组

时间:2015-11-11 20:34:08

标签: c arrays algorithm recursion

我试图通过使用递归函数以反向顺序打印数组但是我收到了很多错误,有人可以指导我完成这个过程,我会犯错误。

#include<stdio.h>
int PrintArray(int a[],int k) {
    int z;
    while(k>0) {
        z=k-1;
        PrintArray(a[],z);
        printf("%d ",a[k]);
    }
}
int main() {
    int n,i;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++) 
        scanf("%d",a[i]);
    PrintArray(a[],n);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

我编辑了你的代码。这是一个新的:

#include<stdio.h> 
void PrintArray(int a[],int k) 
{
    int z;
    if (k>0) 
    {
        z= k-1;
        printf("%d ",a[z]);
        PrintArray(a,z);
     }
 return; 
 } 
 int main() 
 {
     int n,i;
     scanf("%d",&n);
     int a[n];
     for(i=0;i<n;i++) 
         scanf("%d",&a[i]);
     PrintArray(a,n);
     return 0; 
 }

现在让我强调你的错误:

  1. 使用scanf("%d", a[i])时,您必须使用输入位置的地址。即&a[i]

  2. 您的递归函数的类型为int,并且没有返回任何内容。因此,请使用void代替int

  3. 函数调用在语法上也是不正确的。在调用函数时,在传递数组时不应放置[]。只需简单地传递数组的名称即可。例如。 PrintArray(a,z);

  4. 你的函数中的逻辑绝对是错误的。printf("%d ",a[k]);永远不会执行,因为它放在函数调用之后,所以要么调用下一个递归函数,要么调用while循环条件不满意。

答案 1 :(得分:0)

这不起作用,您需要使用此代码:

#include<stdio.h> 
void PrintArray(int a[],int k) 
{
   int z;
   if (k>0) 
   {
      z= k-1;
      printf("%d ",a[z]);
      PrintArray(a,z);
   }
return; 
} 
int main() 
{
 int n,i;
 scanf("%d",&n);
 int a[n];
 for(i=0;i<n;i++) 
     scanf("%d",&a[i]);
 PrintArray(a,n);
 return 0; 
}

答案 2 :(得分:0)

功能

此函数将在指针变量中接收数组的地址,它将接收数组的大小... 然后该函数以相反的顺序显示数组。

void R_output(int *arr, int s) {
  int l;
  if(s > 0)
  {
    l = s - 1;
    cout << arr[l] << " ";
    R_output(arr, l);       
  } 
  return;
}