【发布时间】:2020-07-04 04:53:16
【问题描述】:
我正在学习递归,我们应该从数组中获取最大的数字,但我不明白解决方案。
#include<stdio.h>
#include<stdlib.h>
int biggestNumber(int *array, int n);
int main(void){
int n=3;
int array[3]={3,4,1};
fprintf(stdout, "|||||%d\n", biggestNumber(array,n));
return 0;
}
int biggestNumber(int *array, int n){
if(n==1){
return array[0];
}
else{
if(array[n-1]>biggestNumber(array, n-1)){
return array[n-1];
}
else{
return biggestNumber(array, n-1);
}
}
}
我似乎无法理解这个递归函数。 array[n-1]>biggestNumber(array, n-1)为false后,看不懂返回同一个函数。
【问题讨论】:
-
不需要进行 2 次递归调用,如果将
biggestNumber(array, n-1)的结果保存在变量中,然后使用该变量进行比较和返回,则相同的代码可以工作 -
我会尝试使用尽可能小的数组,这很有意义,所以 2. 并逐行查看代码。这在头脑中非常可行,或者只使用纸和笔。
-
该函数天真地实现 f(A,n) = { A[1] if n = 1, max(A[N], f(A,n-1)) 否则。
标签: c recursion max function-definition