MATLAB函数回归调用,你真的理解吗?

文章讨论了一段用最小二乘法估计指数函数e^x-10根的代码问题,原始代码存在无法正确打印结果的问题。作者分析了阶乘函数的递归调用机制,并提出了一种改进的迭代方法,通过误差裕度控制循环次数来避免无限递归,最终找到根的近似值。修改后的代码能有效解决原问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写了一个最小二乘法估计EXP(x)-10的根代码,发现打印不出最后的值。

multi(0,3)
function m=multi(a,b)
m=(a+b)/2
if b-a<0.01
    return 
end
if (exp(a)-10)*(exp(m)-10)<0
    multi(a,m)
end
if (exp(m)-10)*(exp(b)-10)<0
    multi(m,b)
end

end

然后看了一下阶乘的回归调用内部原理

function y=fac(n); 
if n<0 
 error('n is smaller than 0,error input.'); 
 return; 
end 
if n==0|n==1 
 y=1; 
else 
 y=n*fac(n-1); 
disp(y)
end 

debug可知,程序在第9行会一直调用自己4次而无Y值打印出来,然后才会出来,在9 10 11行之间再次循环绕出到最外一层,打印值依次为2 6 24 125,看出来了吧,打个比方,回调就是一个环形迷宫,调用一次就深入一层,直到结束调用,又一层一层出来回复到最初那一层。

所以该进方法为:

function m=multi(x1,x2)
while x2-x1>0.001%误差裕度控制循环次数
if (exp(x1)-10)*(exp((x2+x1)/2)-10)<0
x2=(x1+x2)/2
end
if (exp(x2)-10)*(exp((x2+x1)/2)-10)<0
x1=(x1+x2)/2
end
end
m=x1
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值