代码:

1 #include <stdio.h>                                                                                                                                                                                      
2 #include <stdlib.h>
3
4 int findmax(int *a, int n)
5 {
6 if(n == 2)
7 {
8 if(a[0] > a[1])
9 return a[0];
10 else
11 return a[1];
12 }
13
14 int rc = findmax(a+1, n-1);
15 if(a[0] > rc)
16 return a[0];
17 else
18 return rc;
19 }
20
21 int main(void)
22 {
23 int i;
24 int a[10];
25
26 for(i = 0; i < 10; i ++)
27 {
28 a[i] = rand();
29 }
30
31 for(i = 0; i < 10; i ++)
32 {
33 printf("a[%d] = %12d.\n", i, a[i]);
34 }
35
36
37 printf("%s line %d, max %d.\n", __func__, __LINE__, findmax(a, 10));
38
39 return 0;
40 }
~

运行:

从一段程序中掌握递归精髓_2d

更加优美的实现

#include <stdio.h>                                                                                                                                                                                      
#include <stdlib.h>

int findmax(int *a, int n)
{
if(n == 1)
{
return a[0];
}

int rc = findmax(a+1, n-1);
if(a[0] > rc)
return a[0];
else
return rc;
}

int main(void)
{
int i;
int a[10];

for(i = 0; i < 10; i ++)
{
a[i] = rand();
}

for(i = 0; i < 10; i ++)
{
printf("a[%d] = %12d.\n", i, a[i]);
}


printf("%s line %d, max %d.\n", __func__, __LINE__, findmax(a, 10));

return 0;
}

结束!