我是编程新手,我被要求在一个名为isInIncreasingOrder()的LinkedList类中为实例方法编写代码,该类返回一个布尔值,该布尔值指示列表中的数据是否按升序排列。
一些要求:
i。该方法必须是递归的。进行直接递归很有意义 将列表中的Item作为参数并检查 之后的剩余物品。
ii。您需要检查以确保列表中至少有一项 在调用递归方法之前。
我正在努力弄清楚如何制作执行上述操作的递归函数。我尝试遵循老师在课堂上递归函数的示例(这是导致以下代码的原因),但它实际上与方法的准则不符。我真的不知道该如何处理'Item it'参数。
我很自信可以满足第二个要求,但是我很难满足第一个要求。任何帮助或朝正确方向的推动将不胜感激。说实话,一般而言,递归使我感到困惑。
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />
<div class="grandparent">
<div class="parent">
<span class="left-side">First Text!</span>
<span class="must-be-centered">SOME TEXT!</span>
<span class="right-side">Other Text!</span>
</div>
<div class="parent">
<span class="must-be-centered">SOME TEXT!</span>
</div>
</div>
这是整个课程的代码:
答案 0 :(得分:0)
好的,这样想。
在以下情况下,列表按升序排列:
当前列表项(在您的示例中是)没有下一个乱序的项
AND
该项目也符合相同的条件(因此也适用于递归)。
因此,假设Item中包含nextItem ...
public boolean isInIncreatingOrder(Item it) {
if (it == NULL) {
return true; // No items is always sorted
}
if (it.nextItem == NULL) {
return true; // nothing after this item means it's sorted
}
return it.compareTo(it.nextItem) < 0 && isInIncreasingOrder(it.nextItem);
}
第一个if检查NULL列表。第二个if用于最后一个项目-根据定义,后面不能有超出项目的内容。
return语句是魔术。首先确保与下一个项目相比该项目的相对顺序。如果失败,则说明您的订单混乱,返回的结果为false。
如果成功,则列表的其余部分顺序正确。
递归。
这真的很重要,@ GilmoreGirling。您真的真的需要了解这一点。这很简单,但一开始可能很难将头缠绕在头上。
答案 1 :(得分:0)
现在,您的函数会遍历列表,而这根本不是递归的。
关于链接列表的事情是,每个项目都指向下一个。我不知道您的特定实现,但是我假设可以按照标准使用it.next
检索下一项。
在这种情况下,递归的概念是关于如何将isInIncreasingOrder函数用于返回作为参数传递的项之后的所有项的顺序是否递增。您只能访问该单个项目,而不能访问整个列表(也许您想查看某个元素之后的所有内容是否都按顺序排列,而不是如果整个列表都按顺序排列)。因此,您问自己:“如何利用仅将单个项目作为参数的单个函数来验证所有后续项目?”。当您考虑时,答案很简单:检查下一项是否与您的顺序递增,如果是,则请该项执行相同的操作。
所以你会有类似的东西:
public boolean isInIncreasingOrder(Item it) {
if (it.value < it.next.value) {
return isInIncreasingOrder(it.next) // It is increasing, so pass it to the next item
}
else {
return null
}
}
当然,您将必须添加条件检查,以便检查条件何时出现。next指向空(列表末尾)。
希望这会有所帮助