我正在运行一个递归函数,它在房间里搜索一个对象。此代码与另一个基本上运行相同代码的进程一起使用。代码所做的第一件事是检查另一个是否找到了对象,如果是,它应该突破该函数。 当我检查其他进程是否找到了该对象时,如果有,我使用“return”来突破该函数,此时它应该转移到其他代码行...但是,对于某些原因是它没有完全爆发,而只是一次又一次地运行该功能。
关于如何让它爆发的任何想法?
我愿意并且可以提供代码,但它有点长
修改
父脚本
!matlab -r "zz_Mock_ROB2_Find" & distT = 0.3;
Rob1_ObjFound = 0;
matrix = search_TEST_cam(rob, vid, 0.3, XYpos, 'north', stack, matrix, 0);
disp('I"M OUT')
递归代码
function matrix = search_TEST_cam(rob1, vid, distT, startingPos, currentDir, stack, matrix, bT)
Rob1_ObjFound = 0;
Rob2_ObjFound = 0;
try
load('Rob2_ObjFound.mat', 'Rob2_ObjFound');
catch
end
if(Rob2_ObjFound == 1)
setDriveWheelsCreate(rob1, 0, 0);
disp('ROB_2 FOUND THE OBJECT')
pause(0.5)
BeepRoomba(rob1)
pause(0.5)
setDriveWheelsCreate(rob1, 0, 0);
return
end
答案 0 :(得分:0)
使用break
中断for
或while
循环并终止执行,即忽略之后的语句。例如,
for i=1:5
if i==3
break
else
fprintf('%u,',i)
end
end
输出1,2,
,代码在i=3
时终止。如果你有嵌套循环,break
将只会突破其当前循环并转到父循环。
要仅跳过当前迭代并继续下一步,请使用continue
。使用相同的例子,
for i=1:5
if i==3
continue
else
fprintf('%u,',i)
end
end
输出1,2,4,5,
。
在函数中使用return
只会将控制权返回给调用它的父函数/脚本。
您的代码中似乎使用了错误的代码。但是,如果不知道如何使用它们,很难说清楚。无论如何,你可以试试这三个中的一个,看看它是否有所作为。
答案 1 :(得分:0)
很难说没有看到你的代码,但我怀疑这是RETURN语句的问题。你如何设置递归更可能是个问题。如果您的递归函数多次调用自身,那么当您最终调用RETURN语句时,它将从堆栈上的当前函数返回到调用函数的控制(即先前调用您的递归函数)。我猜测调用函数没有正确停止递归并最终再次调用自身,继续递归。
我的建议:检查递归函数的退出条件,以确保在找到对象并返回最近的调用时,每次调用都会被正确通知它也应该返回。