Matlab中的递归函数仅返回第一个迭代结果

时间:2016-12-20 10:47:35

标签: matlab recursion

我正在尝试在Matlab中创建一个递归函数,该函数约束在-180:180度之间返回的角度。因此,如果我输入721度的角度,它应该返回1度(两个完整的旋转,然后是1)。 不知何故,它只在第一次迭代后返回值。我可以从命令窗口看到它正确地进行计算并将更新的值输入到函数中。它最终返回错误的值。

1st:721 - 360 = 361 第二名:361 - 360 = 1

它返回361而不是1,它开车就是疯子! :)

我一直在搜索,似乎新版本可能存在递归函数的问题?

这是我的Matlab功能:

function [constrainedTo180] = constrainingTo180(inputVector)
% Returns numbers to be constrained within +/- 180 degrees
% So 358 degrees is returned as -2 degrees
% fprintf('Running constraining function \n')

[ir,ic,ip] = size(inputVector);
constrainedTo180 = nan(ir,ic,ip);

for r = 1:ir % Iterate over rows
    for c = 1:ic  % Iterate over coloums
        for p = 1:ip  % Iterate over pages

            if inputVector(r,c,p) > 180
                constrainedTo180(r,c,p) = inputVector(r,c,p) - 360;
                fprintf('%d is Over 180 \nResult: %d \n\n\n',inputVector(r,c,p),constrainedTo180(r,c,p))
            elseif inputVector(r,c,p) < -180
                constrainedTo180(r,c,p) = inputVector(r,c,p) + 360;
                fprintf('Under -180 \n')
            else
                constrainedTo180(r,c,p) = inputVector(r,c,p);
                fprintf('else...\n')
            end
        end
    end

end

% Repeat until no values is outside [-180;180]
if max(abs(constrainedTo180(:))) > 180
    pause(1)
    fprintf('Max is %2.2f\n', max(abs(constrainedTo180(:))))
    inputVectorTemp = constrainedTo180;
    fprintf('Input to recursive function is %d \n', inputVectorTemp)
    constrainingTo180(inputVectorTemp);
end

如果您只是使用1x1矩阵 constrainingTo180([721])运行,则命令窗口输出:

    721 is Over 180 
Result: 361 


Max is 361.00
Input to recursive function is 361 
361 is Over 180 
Result: 1 



ans =

   361

如果我遗漏了任何重要信息,请告诉我。非常感谢!

1 个答案:

答案 0 :(得分:4)

您永远不会将递归函数的新调用分配给原始输出。

倒数第二行应为

constrainedTo180=constrainingTo180(inputVectorTemp);