在MATLAB中返回NOT退出函数

时间:2011-03-31 02:13:28

标签: matlab

我正在运行一个递归函数,它在房间里搜索一个对象。此代码与另一个基本上运行相同代码的进程一起使用。代码所做的第一件事是检查另一个是否找到了对象,如果是,它应该突破该函数。 当我检查其他进程是否找到了该对象时,如果有,我使用“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 

2 个答案:

答案 0 :(得分:0)

使用break中断forwhile循环并终止执行,即忽略之后的语句。例如,

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语句时,它将从堆栈上的当前函数返回到调用函数的控制(即先前调用您的递归函数)。我猜测调用函数没有正确停止递归并最终再次调用自身,继续递归。

我的建议:检查递归函数的退出条件,以确保在找到对象并返回最近的调用时,每次调用都会被正确通知它也应该返回。