我的递归功能在我的程序中失败了。我正在制作一个方法,构造一个相对简单的对象数组并用特定值填充它们。即,对象1具有这些值3,2,5,6,7,对象2具有这些值; 4,5,6,4,5。等等
当我有方法的不同部分对函数执行不同的操作时,递归就会出现。如下图所示:
$query = "SELECT *
FROM business_contacts bc
INNER JOIN internships i ON bc.id_business = i.id_supervisor_internship
WHERE internships.name_enterprise_internship = '$name_enterprise'";
当我检查我的返回值时,我得到一个0.我在该方法中实际做的事情与我的递归函数无关,并且函数IS在它应该跳转到的最后它会诅咒终止条件。根据我的理解,问题是我格式化递归函数的方式。
下面是实际代码它是一个飞机座椅构造器,为飞机座椅提供价值,就像它被占用等等。上面的内容更容易阅读,但如果我的语法不正确,也可能是问题。
objectConstructor(Object foo, int switcherVar){
if(switcherVar == 1){
//terminating condition leave method
return 1;
} else {
if(switcherVar == 2){
//do something
objectConstructor(object foo, 1)
}
}
return 0;
}
我的打印线全部命中,但我的返回值仍然是0。
答案 0 :(得分:3)
在你的代码中,无论你做什么递归,事实上,无论你做什么计算都不会计算,因为你最后为所有情况返回0但是基数为1(你返回1)。 / p>
objectConstructor(Object foo, int switcherVar){
if(switcherVar == 1){
//terminating condition leave method
return 1;
} else {
if(switcherVar == 2){
//do something
objectConstructor(object foo, 1)
}
}
return 0;
}
程序中的递归以这种方式工作:您使用切换器== 2进行第一次调用,这使得递归调用白名切换器== 1.但是然后您丢弃该结果并返回0。
这样做的正确或逻辑方式更类似于:
objectConstructor(Object foo, int switcherVar){
if(switcherVar == 1){
//terminating condition leave method
return 1;
} else {
if(switcherVar == 2){
//do something
return objectConstructor(object foo, 1)
}
}
}
希望这有帮助。
然而,仔细查看您的代码,我认为您通过递归替换序列。我会按座位类重构(即划分代码)你的功能,然后拨打所需的电话。在代码中 at 不需要递归。见下文:
private void airplaneSeatConstructorFirstClass(Airplane airplane, int numberOfSeats)
{
for (int x = 0; x < numberOfSeats; x++) {
airplane.getSeats()[x].setOccupied(false);
airplane.getSeats()[x].setFirstClass(true);
airplane.getSeats()[x].setBusinessClass(false);
if ((x % 4) == 0 || (x % 4) == 3) {
airplane.getSeats()[x].setWindowseat(true);
airplane.getSeats()[x].setAisleSeat(false);
} else {
airplane.getSeats()[x].setAisleSeat(true);
airplane.getSeats()[x].setWindowseat(false);
}
}
}
private void airplaneSeatConstructorBussinessClass(Airplane airplane, int numberOfSeats)
{
for (int x = 0; x < numberOfSeats; x++) {
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + x].setBusinessClass(true);
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + x].setFirstClass(false);
airplane.getSeats()[airplane.getNumberOfSeatsPerClass()[0] + x].setOccupied(false);
}
}
......等等。
现在你只需要打电话:
airplaneSeatConstructorFirstClass( airplane, 80 );
airplaneSeatConstructorBussinessClass( airplane, 40 );
正如你所看到的那样容易得多(除非我错过了一些大事)。
答案 1 :(得分:2)
让我们说这个
objectConstructor(object foo, 1);
返回1.
之后你做return 0
。当然整件事将会返回0。
也许你应该
return objectConstructor(object foo, 1);