首页 > 解决方案 > 使用递归和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;
}

标签: carraysrecursion

解决方案


推荐阅读