程序是这样的,为什么不能递归呢?改了好几次
function[n,line,baseVolume,kmax,eps,BalanceNode,ground,transfomer,operation,PVNode,P,Q,J]=PowerFlow_NT_2(filename)
%% ===============================================
% 功能:使用牛顿法进行潮流计算
% 时间:2017年 10月
%%主程序“PowerFlow_NT.m”
% 节点数=n,支路数=line,基准容量=baseVolume, 平衡节点=BalanceNode;
% 节点导纳矩阵=Y;
% 迭代精度=eps,最大迭代次数=kmax;
% 发电机有功功率=Pg,发电机无功功率=Qg, 线路负荷有功=Pl,线路负荷无功=Ql;
% 接地支路参数=ground,变压器参数=transfomer , 运行参数=operation, PV节点参数= PVNode;
% 节点电压幅值=U,节点电压相角=angU;
% 注入有功功率=P,注无功功率=Q;
% 功率不平衡量=devS;最大功率不平衡量=maxDevS;
% 雅可比矩阵=J;
%% ==============================================
set(0,'RecursionLimit',1200);
[n,baseVolume,kmax,eps,BalanceNode,line,ground,transfomer,operation,P,Q,PVNode,U,angU] = readDate(filename); %打开读取文件
tic
[Y] = formY(n,lineI,lineJ,lineR,lineX,lineB,groundB,tranI,tranJ,tranR,tranX,trank); %生成节点导纳矩阵
format long
k=0;
gg=[' 迭代次数 ' ' max(dp,dq)'];
disp(gg);
while (k<kmax)
[deltpq,P,Q,U,angU] = UnBalance(BalanceNode,Y,P,Q,U,angU); %计算不平衡量
ggf=[k,max(abs(deltpq))];
disp(ggf); %计算最大不平衡量,修改精度
if max(abs(deltpq)) < eps
disp('潮流收敛');
break
end
[J]= Jac_(BalanceNode,n,angU,U,P,Q); %形成雅可比矩阵
dua = Jac\deltpq; %计算电压幅值和相角的修正量
U=U+dua(n+1:2*n).*U;
angU=angU+dua(1:n); %重新计算电压幅值和电压相角
k=k+1;
end
if k==Kmax
disp('潮流计算不收敛'); %超过最大迭代次数则输出潮流不收敛
end
toc;
end
程序没有错误,想知道为什么程序递归不了,急,在线等
程序默认递归栈最多30层,没事不要用递归,能用迭代就迭代
递归有限制的,会爆栈 ,每一次递归都是向栈里面压,递归层级过多的话就会StackOverflow
解决方法是改为迭代,或者是尾递归优化
递归太深会造成调用栈过长,而虚拟机本身是又大小限制的,建议用循环代替,或者优化递归条件
你这是什么语言?java语言默认栈的大小可以调大(一个虚拟机参数,很好调整),这样递归次数可以变大一点,你可以查查你这个语言调整栈大小如何配置