arrays - 嘿,我最近学习了递归,我想知道为什么我的代码不能在 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 中打印出来,但相反,它运行所有内容并获取输入,但再次打印输出。
解决方案
对于初学者来说,函数名称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 );
}
}
推荐阅读
- python-3.x - Bottle: HEAD 总是回退到 GET,因此函数总是执行两次?
- python - 正则表达式捕获第一个数字组
- compiler-errors - 如何使用 `real sepaa[allocatable](:)` 语法编译 Fortran?
- angular - 在可编辑材料表中使用 mat-checkbox 时出错
- string - Freemarker ISO字符串到带有时区的日期时间
- python - 2D 切片混乱
- arrays - sll 的目的是什么,并在翻译后的 MIPS 代码中添加?
- google-apps-script - Google 表格:如何将图像标题自动填充到单元格列中(不是图像)?
- python - “TypeError: unhashable type: 'set'” 用于 python discord bot
- c# - C#检查日期时间列表是否包含链接日期并转换为字符串