class myclass {
static int fun(int a[],int n){
int x;
if(n == 1){
return a[0];
}
else{
x = fun(a, n-1);
if(x > a[n-1])
return x;
else
return a[n-1];
}
}
public static void main(String[] args){
int arr[] = {12, 10, 30, 50, 100};
System.out.println(fun(arr, 5));}
}
为什么输出是100而不是12。我不明白为什么最后一个递归调用当n的值为1时,它将阻塞else而不是if。
4条答案
按热度按时间mqkwyuun1#
下面详细说明为什么结果是100。
希望您能够理解递归示例中缺少了什么!
3pmvbmvn2#
n=1,x=12,12>a[0](12)-->返回a[1-1]=12
n=2。x=12,12>a[1](10)-->返回x=12;
n=3。x=12,12>a[2](30)-->返回a[3-1]=30
n=4 x=30,30>a[3](50)-->返回a[4-1]=50
n=5 x=50,50>a[4](50)-->返回a[5-1]=100
zz2j4svz3#
这是因为您在最后返回同一函数的前一个示例,因此您的方法调用和返回如下所示(每个级别的缩进都是函数调用及其返回)。如果您知道如何使用调试器,逐步检查代码,并在运行过程中查看和绘制此图表,这将有助于您在脑海中形象化递归调用和每次返回的值。
cdmah0mi4#
这是因为你在寻找数组中的最大值。改变
if(x > a[n-1])
至if(x < a[n-1])
对于给定的输入,程序将返回10。