Java递归方法

时间:2018-04-17 16:54:53

标签: java

任何人都可以向我解释如何为这个问题#10获得正确的答案:

enter image description here

这是AP计算机科学AP Board website上列出的示例问题

2 个答案:

答案 0 :(得分:2)

它只是一个二元搜索。答案很奇怪,因为从技术上讲,没有重复的排序数组的索引是"元素的数量少于"价值。

答案 1 :(得分:0)

正确答案(根据@ KevinRaoofi的答案)是A.但是,你的问题不同:

  

如何获得这个问题的正确答案?

有不同的方法可以做到这一点。

例如,您应该能够在此代码中识别二进制搜索。您可以在lowhigh之间使用中间元素。唯一的"实际" return是if (arr[mid] == num) return mid;,它返回等于num的元素的索引。你意识到这一点,很容易看出这正是整个方法正在做的事情。

因此,您获得的元素索引等于num。提及 index 的唯一答案是E,但这显然是一个问题。 num不一定是中间元素,因此E不正确。此外,如果在多项选择中你有一个或多或少的一个类型的答案和一个完全不同的答案,这很可能是一个问题。 :)答案通常是为了花费你的时间而设计的。

现在,消除了 index 的唯一答案,哪一个A-D是正确的?它们中的任何一个都是正确的似乎是不合逻辑的,因为它们处理"元素的数量"而不是索引。在这一点上,很容易将所有答案都视为不正确。但相反,请尝试以下几个例子:

0, 1, 2, 3, 4; num=2; result=2;
2, 4, 6, 8; num=2; result=0;
3, 5, 7, 9, 11; num=11; result=4;

现在检查这些结果的答案表明A在每种情况下都是正确的。所以它必须是正确的,但为什么呢?此时应该可以认识到,数组中元素的索引等于此索引之前的元素数。在升序数组中,这些数字小于给定索引处的数字(num)。这就解释了为什么A在任何场合都是对的。