首页 > 解决方案 > 嘿,我最近学习了递归,我想知道为什么我的代码不能在 c 中工作

问题描述

这是代码

#include <stdio.h>

int print(int a[],int size)
{ int i=0;
if (size!=0) //4<4
{
    printf("%d",a[i]);
    return print(a[i+1],size-1); 
}

}
int main()
{ 
    int n,a[100],size;
        printf("Enter array size");
    scanf("%d",&size);
for (int i=0;i<size;i++)
{
    printf("Enter number u want to enter");
    scanf("%d",&a[i]);
}
 printf("%d",print(a,size));

}

我希望它以 3 的大小为例,并具有 5 4 2 的数组并在 sequnece 5 4 2 中打印出来,但相反,它运行所有内容并获取输入,但再次打印输出。

标签: arrayscrecursionprintffunction-definition

解决方案


对于初学者来说,函数名称find(在更新之前在您的问题中使用)令人困惑。你试图在函数中找不到任何东西。

您的函数实际上什么也不返回。所以返回类型int没有意义。

因此这个电话

printf("%d",print(a,size));

还调用未定义的行为。

在这次通话中

return find(a[i+1],size);

表达式a[i+1]具有类型int,而不是int *函数声明所需的类型。此外,由于其声明,该变量在函数的每次递归调用中i始终等于0

int i=0;

如果您只想输出一个数组,那么该函数可以通过以下方式查找

void print_array( const int a[], size_t size)
{
    if ( size != 0 )
    {
        printf( "%d", *a );
        print_array( a + 1, size - 1 );
    }
}

推荐阅读