c语言 求大神 详细解析 谢谢!

#include<stdio.h>
int f(int a[],int n)
{if(n>1)
{int t;
t=f(a,n-1);
return t>a[n-1]?t:a[n-1];
}
else
return a[0];}
main()
{int a[]={8,2,9,1,3,6,4,7,5};
printf("%d\n",f(a,9));}

这个程序是用递归取数组成员最大值的
函数第一个参数是数组 第二个是成员个数
函数的退出递归条件是当个数等于1时 返回第数组第一个成员(数组索引从0开始 所以写0)
如果个数大于1 那么就调用函数f 并将个数减一个传进去

然后把返回的值跟当前索引处的值做比较 返回最大的

比如有数组 5,3,8,2
把函数展开就是

函数会先处理最前面的元素 也就是先展开递归最深层的
最后一次 个数=1 返回第一个值 5
t1=5
个数=2 时 t1跟 a[个数-1] 比较 也就是 跟第二元素比较 还是返回5
t2=5
个数=3时 a[个数-1] 比较 也就是 跟第三元素比较 返回8
t3=8
个数=4时……
f(数组,4) 就执行结束了 返回 8追问

前辈你好!
这个程序意思是逐个排查数组中数字,直到排查完,返回最大值是吗?
那如何判断这条程序是要达到这个目的,是根据那一条语句来判定的?

追答

?:三元运算返回的是最大值 直接将结果返回了 所以是去最大值的的代码 函数不复杂 可以在大脑中想象出运行过程及结果

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言基本代码,求详细解释,越详细越好。
double b;\/\/定义双精度数据b b=cos(a);\/\/计算cos(a),并赋值给b return b;\/\/返回b的值 }

求教C语言大神!!!最好讲一下理由,万分感谢
首先,主函数只进行了一个fun操作,其他的就是定义和输出,所以字符串(或者说字符数组)的调整完全由fun决定 fun中首先定义了x和y,因为s的长度是5,所以y = (strlen(s) - 1) \/ 2=(5-1)\/2=2 因此:循环开始时,初始值是x=0,y=2,s="abcde",进入循环 第一次:0<2成立,可以进行,...

C语言求完数,不能理解这个代码,求大神指教,最好能详细一点。万分感谢...
\/\/就存入数组保存} printf("%d = ", i); \/\/输出等式的左边for(

小弟初学C语言 求大神解答一下!
在c语言的解释是:for:循环语句。作用:循环。它的一般形式为: for(<初始化>;<条件表达式>;<增量>) { 语句;} 语句 初始化:总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式:是一个关系表达式,它决定什么时候退出循环;增量:定义循环控制变量每循环一次后按什么方式变化。这三个部分...

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
主要考察你c语言三目运算符的结合方向 是自右向左的 所以a<b?a:c<d?c:d 可以看成 a<b?a: (c<d?c:d) 1 < 4 ? a : (c < d ? c:d)括号内的表达式也可以看做是一个元素 因为 a = 1 b = 4 所以 条件 a < b 成立 所以选前者 a 答案就是 A) 1 ...

C语言,大神详细讲下图中为啥这么做,谢谢谢谢。
第二题:这道题考的是你对if语言范围的认知。稍微整理下代码你就清楚了 if(a>b){ a=b;}b=c;c=a;首先a=10,b=30,c=20,所以a>b不成立,为假,不执行if语句内容,跳过a=b b=c,即b被赋值c的值,所以b=20 c=a,即c被赋值a的值,所以c=10 所以最后a=10,b=20,c=10 ...

C语言 函数,求大神解析
函数abc的功能是求u和v的最大公约数。这里传进来的u=24 v=16 第一次24%16=8 w=8 u=16 v=8 第二次:u%v=0也就是w=0,这时候u=8 v=0结束循环,返回的u=8 所以结果就是8

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因..
第三项 第一项的结果不正确。第二项和第四项结果等同都是指向指针的指针操作。可以将二维数组看成一个双重指针,第一个中括号是一个一重指针。比如说a[n][m]中a[0]是一个指向a[0][m]数组首位a[0][0]的指针,而a则是指向指针数组*a[n]的首位a[0]的指针。这样我们来看B选项,*(a+2)...

c语言菜鸟求帮忙,跪求跪求 我需要解释 谢谢啦
include "stdio.h"main(){int a,b,c,d,e;a=c=1;b=20;d=100;if(!a)d=d+1;else if(!b)if(d)d=--d;else d=d--;printf("%d\\n\\n",d);}看明白了么,最后一个else匹配的是if(d)这一句的if。从头解释,a、b、c、d、e赋值就不用说了,到if(!a),因为a=1,所以!a=0...

C语言问题。求大神详细解释,谢谢
(*(p+m)+k)就是p[m][k],p指向x,也就是x[m][k],两次for循环就是n=x[0][1]+x[1][1]=3+11=14

相似回答