帮我理解这段代码

时间:2014-08-28 09:09:55

标签: c

我必须编写一个c代码,找到使用recursion.i在互联网上找到的最小数组。但我不太了解它,有人可以帮我理解吗?

#include <stdio.h>

int a[100],i;
void read(int i,int n)
{
    if(i>=n)
        return;
     printf("element %d",i);
     scanf("%d",&a[i]);
     read(i+1,n);
}

int rec(int a[],int n)
{
    int min;

    if(n==1)
        return a[0];
    else {
        min=rec(a,n-1);

        if(min<a[n-1])
            return min;
        else
            return a[n-1];
    }
} 

void main()
{
    int i,j,n,a[100];
    printf("enter n :");
    scanf("%d",&n);
    read(0,n);

    printf("\n%d",rec(a,n));

    getch();
}

5 个答案:

答案 0 :(得分:1)

如果 n = 1 ,则分钟。是[0]因为只有一个元素。

如果 n> 1 ,那么它每次调用带有数组的rec和n-1作为长度。因此,将有一个时间n = 1并返回[0]。然后它将a [0]与[1]进行比较。并返回最小值。然后它会将返回值minimum与a [2]进行比较并返回较小的值....依此类推。

答案 1 :(得分:0)

int rec(int a[],int n)
{
    int min;

    if(n==1)
        return a[0];
    else {
        min=rec(a,n-1);

        if(min<a[n-1])
            return min;
        else
            return a[n-1];
    }
} 

此函数将遍历所有数组元素,然后逐个进行比较,每次返回较小的数组,为您提供最小的数组:

示例:对于a = {10,2,4,5}

  • rec将从5开始,只用前一个elem调用自己,直到他在第一个:10
  • 然后将返回10
  • 将10与2进行比较并返回2,因为2&lt; 10
  • 将2与4进行比较并返回2,因为2&lt; 4
  • 将2与5进行比较并返回2,因为2&lt; 5

答案 2 :(得分:0)

它计算数组中的最小值。看那样: 假设您给出了一个包含10个数字的数组。魔术师告诉你最后9个元素的最小值是5.你现在拿第一个元素并将它与5比较。如果它变小则返回它,否则你返回5.魔术师是递归调用到具有最后n-1个数字的数组。

答案 3 :(得分:0)

rec(a, n)返回{a [0],...,a [n-1]}

中的最小值

现在我们讨论两种情况:

如果n = 1,则rec(a,n)应为a[0],因为只有一个值

否则,rec(a,n)应该是rec(a,n-1)的最小值(即{a [0],..,a [n-2]}中的最小值)和{{1这是以下代码的作用:

a[n-1]

答案 4 :(得分:0)

该程序读取用户想要输入的数组的大小,然后调用&#34;读取&#34;它以递归方式读取给定大小的数组元素并填充全局数组&#34; a&#34;。接下来,它试图找到本地&#34; a&#34;的最小值。使用递归函数&#34; rec&#34;的数组,由于是&#34; auto&#34;而被垃圾初始化。变量类型并将此值键入终端屏幕。接下来,它等待用户键入任何字符。