function [y]=AmericanPutClassic (St,t)
% S0 = 100;
K = 100;
r = 0.05;
sigma = 0.3;
T = 2;
nsteps = 5;
% St
dt = T/nsteps;
u=exp(sigma*sqrt(dt));
d=1/u;
Pu=(exp(r*dt)-d)/(u-d);
Pd=1-Pu;
if t==T
y=max(K-St,0);
return
elseif t<T
upPrice=AmericanPutClassic(St*u,t+dt);
downPrice=AmericanPutClassic(St*d,t+dt);
PrevPrice=(Pu*upPrice+Pd*downPrice)*exp(-r*dt);
if max(K-St,0) > PrevPrice
y=max(K-St,0);
else
y=PrevPrice;
end
return
end
end
我認爲我的代碼可以完成這項工作,但是當我使'nsteps'高於5時,它會崩潰......我不斷收到不同的錯誤......現在它只是說我的代碼有問題, 5之前,它會說: 「???達到500的最大遞歸限制。使用set(0,'RecursionLimit',N) 來更改限制。請注意,超出您的可用堆棧空間可能會導致 崩潰MATLAB和/或你的電腦。「遞歸二叉樹代碼,不能做超過5個步驟...爲什麼?
任何人都可以發現問題嗎? 我通過調用AmericanPutClassic(100,0)開始......
感謝