C:如何通过递归找到struct数组的最大值?

时间:2015-02-18 12:20:47

标签: algorithm

我刚结束了我的第一次考试,通过了(感谢你)。 我还有一个问题要问:我必须找到一个struct数组的最大值,然后使用递归算法printf其中包含max值的数组元素。为了解决这个问题,我一直在键盘上砸了大约一个星期,但我似乎无法做到这一点。你能救我吗?

这是代码: 请不要关心STRCPY,ty。

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    char autori[100];
    char titolo[100];
    int anno;
    int codice;
    float prezzo;
    char stato[50];
} libro;

int massimo(int m, int n );
libro ricorsivo(libro a[], int len);

void main()
{
    libro max;
    int len=30;
    libro elenco[100];

    strcpy(elenco[0].autori,"Angelo Ciaramella e Giulio Giunta");
    strcpy(elenco[0].titolo,"Manuale di Programmazione in C");
    elenco[0].anno=2009;
    elenco[0].codice=0;
    elenco[0].prezzo=0.0;
    strcpy(elenco[0].stato,"Disponibile");
    max=ricorsivo(elenco, len);
    printf ("il massimo vale %d", max);
}

libro ricorsivo(libro a[], int len)
{
    if (len==1)
        return a[0];
    else
        return massimo(a.prezzo[len-1],ricorsivo(a,len-1));
}

int massimo(int m, int n)
{
    if (n>m)
        return n;
    else if (m>n)
        return m;
}

我知道算法不完整,但问题最多的部分就是那些功能。我希望你能帮助我,谢谢你。

1 个答案:

答案 0 :(得分:0)

以下是一些可以帮助您修复代码的提示:

首先,您的massimomax)函数定义不正确。在m == n此函数不返回任何内容的情况下,不允许这样做。你想要的是n > m你返回n,否则只返回m,即

int max(int m, int n) { return n > m ? n : m; }

接下来,在你的递归函数中,你在这一行中有一些类型错误:

return massimo(a.prezzo[len-1], recorsivo(a, len-1))
  • a不属于libro类型,属于libro[]类型,因此不会有prezzo字段。
  • 如果a 类型为libro,并且您访问了其prezzo字段,则其类型为float,所以它会对它执行数组索引不正确。
  • 如果a.prezzo[len-1] 生成数组的prezzo元素的len-1值,那么它将具有float类型,但是您的massimo函数仅接受int s。
  • ricorsivo(a, len-1)会返回libro,并且会将massimo传递给int

要解决这些问题,请尝试以下方法:

  • 删除massimo功能,但不需要它。
  • 在递归函数的递归情况下
    • 以递归方式调用它以从阵列的其余部分获取最大值。
    • 将数组其余部分的最大值prezzoprezzo元素的len-1值进行比较。
    • 使用较大的libro返回prezzo

您应该能够将上述内容翻译成一些非常简单的C代码。