2

我有一个脚本,当 if 语句的条件为假时,它会调用自己。用户定义的最大迭代次数可达 20 次。

问题是算法本身内部有一个变量会发生变化,如果 if 语句的条件为假,则整个过程将重新开始。问题是当它再次开始时要进行的新计算应该取决于最后计算的值而不是初始值。在这一点上,我正在通过使用 set-get 函数来实现我想要的。设置值标准的问题在于它会在每次运行时更新 GUI,这非常耗时。任何想法都非常感谢。下面是有效的代码,但很长;请注意,这是对实际脚本的非常简短的摘要,但它可以达到目的。

FunctionOne
       InitialPrice=str2double(get(handles.StockP,'String'));
       TargetPrice=105;
       T=str2double(get(handles.Time,'String')); %This value is maximum 20 
       StockPrice= InitialPrice*(1+randn) %just for simplicity
       If Time > 0 
            If StockPrice>TargetPrice 
              update the GUI %end
            else 
               set(handles.StockP,(StockPrice))
               set(handles.Time,'String',(T-1))
               FunctionOne  
            end
        end
end
4

2 回答 2

1

您可以让 FunctionOne 接受如下参数吗?从 FunctionOne 内部调用时,您传递了两个参数,但是从外部调用该函数时,您像以前一样在不带参数的情况下调用它。

FunctionOne (StockP,Time)

   if nargin == 2
       InitialPrice = StockP;
       T = Time;
   else 
       InitialPrice=str2double(get(handles.StockP,'String'));
       T=str2double(get(handles.Time,'String')); %This value is maximum 20 
   end

   TargetPrice=105;
   StockPrice= InitialPrice*(1+randn) %just for simplicity

   If T > 0 
        If StockPrice>TargetPrice 
          update the GUI %end
        else 
           FunctionOne(StockPrice,T-1); 
        end
    end
end
于 2013-01-23T05:06:12.763 回答
0

也许您可以存储StockPrice在一个全局数组中,删除递归调用,并在所有计算步骤完成后才更新 GUI。就像是:

FunctionOne(InitialPrice, TargetPrice, Time)
    StockPrice(1) = InitialPrice;
    T = ...;
    i = 1;

    while( T>0 )
        i = i+1;
        T = T-1;
        StockPrice(i) = StockPrice(i-1)*(1+randn);
    end

    Update the GUI %not sure if you want to only use certain StockPrice values or all of them
end
于 2013-01-23T05:21:31.753 回答