c - 使用递归和malloc检查c中数组的顺序
问题描述
我有一个错误,我似乎无法弄清楚几个小时。首先问题是:
使用递归函数来确定数组是“非常升序”、“升序”还是“不升序”,
- 如果非常上升返回 1 并发送一个指针 = 1,
- 如果升序返回 1 并发送一个指针 = 0,
- 如果不是升序,则返回 0 并发送一个指针 = 0。”
我在没有递归的情况下完成了它,但是当我使用递归函数时,尝试使用“未处理的异常”(或不是我的内存 - 我认为)时出现错误。
附带说明:我是动态内存的新手,我尝试malloc
在递归函数上进行操作。
非递归工作函数:
#include <stdio.h>
#define N 5
void inputArray(int *arr)
{
int i;
for (i = 0; i < N; i++)
{
scanf_s("%d", &arr[i]);
}
}
int check_order(int *arr, int *n)
{
int i;
for (i = 0; i < N - 1; i++)
{
if (arr[i + 1] < arr[i])
{
*n = 0;
return 0;
}
if (arr[i + 1] == arr[i])
{
*n = 0;
}
}
return 1;
}
void main()
{
int arr[N], n = 1;
printf("enter 5 variables for array:\n");
inputArray(&arr);
printf("[very ascending: 1, 1] | [ascending: 1, 0] | [not ascending: 0, 0]\n");
printf("(%d, %d)\n", check_order(&arr, &n), n);
return 0;
}
//********************************************************************
#include <stdio.h>
#include <stdlib.h>
void inputArray(int *arr, int n)
{
int i;
printf("enter %d variables for array:\n", n);
for (i = 0; i < n; i++)
{
scanf_s("%d", &arr[i]);
}
return;
}
递归函数:
int check_order_recursive(int *arr, int n, int *p)
{
if (n < 2)
{
return 1;
}
if (arr[n - 1] < arr[n - 2])
{
*p = 0;
return 0;
}
if (arr[n - 1] == arr[n - 2])
{
*p = 0;
}
check_order_recursion(*arr, n - 1, *p);
}
void main()
{
int *arr, n, p = 1;
printf("how many elemants in the array?:\n");
scanf_s("%d", &n);
arr = (int*)malloc(sizeof(int) * n);
inputArray(arr, n);
printf("[very ascending: 1, 1] | [ascending: 1, 0] | [not ascending: 0, 0]\n");
printf("(%d, %d)\n", check_order_recursive(arr, n, &p), p);
free(arr);
return;
}
解决方案
推荐阅读
- android - Xamarin Forms:让控件在地图顶部重叠
- java - 创建文件中定义的名称为“userController”的 bean 时出错
- reactjs - React Context API - 元素类型无效
- java - 用于侦听是否有其他 Java 程序正在运行的 Java 程序
- java - 如何使用 Apache POI 获取签名的 docx 信息?
- drupal - 如何使用来自另一个网站的 Oauth2 令牌 SSO 在 Drupal 8 网站上自动登录/注册
- swift - 在 Swift MacOS 中,点不会在 CGContext 中绘制
- c# - GetExecutingAssembly 和 GetTypes 正在检索带有“+<>c”后缀的额外类型,该后缀显然不存在
- javascript - WebP 格式在 IE 浏览器中不起作用
- php - 如何获取相关帖子比较他们的 json 标签