帮忙解释一道程序

来源:百度知道 编辑:UC知道 时间:2024/09/25 00:37:00
#include<stdio.h>
int min(int a[],int n)
{
int t;
if(n==1) return a[0];
t=____________(答案是min(a+1,n-1);
if(t>a[0])t=a[0];
return t;}
void main()
{int b[]={9,4,8,7,5,10};
printf("%d\n",min(b,5));}
请帮我解释下,谢谢,越详细越好
答的好我再加10分~~~
min(a+1,n-1);
为什么填这个啊?

此函数为递归调用以求数组中的最小值
想象数组a[3]= { 1,2,3 };

第一次调用 int min( a, 3 )
因n不等于1 , 执行t=min( a+1, n-1 )递归调用(第二次)min函数 min( a+1, 2 )
第二次调用 int min( a+1, 2 ) a+1即指向第二个元素2,
因n不等于1, 执行 t=min( a+2, 1)第三次调用
第三次 调用 因n=1, 所以直接返回 a+2处的元素 a[2]=3;
然后是依次回调最终 返回数组a中的最小值 1

LZ,学过递归程序设计吗? 如果学过, 应该很容易明白

因为: a表示数组第一个元素地址, a+1表示数组第二个元素地址, 递归程序第二次调用的时候, 需要从下一个元素开始, 所以需要a+1
n表示数组的长度, 从数组的下一个元素开始, 即表示下一次调用的时候, 数组元素的个数要比本次调用时少一个, 所以n-1

填min(a+1,n-1)原因看下面具体的就知道鸟~

min(b,5)运行顺序如下: (下面a用b代入)
如果n=1的话返回b[0]
if n!=1:不断调用min(b+1,n-1)直到n-1=1,这个时候函数是min(b+4,1)

接着把min(b+4,1)的值返回上一层min(b+3,2),t=b[0]=9,
接着运行min(b+3,2)中 t=min(b+1,n-1)语句
继续运行if(t>b[0])t=b[0]
紧接着把t=9返回上一层...
如此循环,直到计算出t=min(b+1,4);
f(t>a[0])t=a[0];
return t;
返回最终的结果

这是递归:
如果数组只有一个元素,那么最小的元素肯定就是那个唯一的数。
否则(不止一个元素),拿第一个元素(a[0])和后面数组(除了a[0]剩下的元素组成的数组)中最小