一个数学计算问题(50分)

  • 主题发起人 主题发起人 rmh
  • 开始时间 开始时间
R

rmh

Unregistered / Unconfirmed
GUEST, unregistred user!
x1=c-a*b
x2=c-(a-x1)*b
x3=c-(a-x1-x2)*b
......
x(i)=c-(a-x1-x2-...-x(i-1)))*b
其中:a,b,c为常数
请求帮助
求解x(i)的程序如何写?
 
//在c语言中,用循环控制数组容易解出x.
float s=0;
x[0]=c-a*b;
//初始化x[0]
for(i=1;i<=n;i++) //循环n次,那么x[n]为解的数
{
s=s+x[i-1];

x=c-(a-s)*b;

}
cout<<x[n]<<endl;
 
用递归实现:
function js(i:integer):real;
var temp:real;
begin
result:=0;temp:=0;
if i<1 then
showmessage('必须i>=1');
if i=1 then
result:=c-a*b;
if i>1 then

begin
i:=i-1;
while i>=1 do
begin
temp:=temp+js(i);i:=i-1;
end;
result:=c-(a-temp)*b;
end;
end;
 
不需要递归
int FOO( int x, int* n)
{
int t = 0;
for (int i = 0 ;
i<x ;i++)
{
t += n;
}
return c-(a-t) *b;
}
 
用递归速度奇慢
 
分析:
 if n=1 x[1]=c-a*b;
if n=2 x[2]=c-(a-x[1])*b
=c-a*b+b*x[1]
=x[1]+b*x[1]
=(1+b)*x[1]
if n>3 ......
=> x[n]=(1+b)*x[n-1]
证明:
  x(i-1)=c-(a-x1-x2-...-x(i-2)))*b ...1;
x(i)=c-(a-x1-x2-...-x(i-1)))*b ....2;
2-1 =>x(i)-x(i-1)=b*x(i-1)
<=> x(i)=(1+b)*x(i-1)
得证
所以以上问题简化为求
x1=c-ab
x2=(1+b)*x1
......
x(i)=(1+b)*x(i-1);
算法如下:

function x(n){
if (n==1)
return c-a*b;
else
return (1+b)*x(n-1);
)
or
function x(int n):real
begin
if n=1 then
result := c-a*b
else
return (1+b)*x(n-1);
end;
 
我看错了,imking的数学归纳法做的是正确的。
也是最简单的。虽然效率可能不是最高。
 
imking的方法好,这样的递归比直接递归好多了
数学归纳法,啊,今年高考数学最后一题……我考虑了用缩放还是数归……结果还是没做出来……55555555555
我原以为数归学了没什么用处,今天顿悟了……
 
我是昨天注册进此论谈的,以前注册过但没有时间上网,所以积分很低,
请问 rmh,按规矩是不是可以得到你的¥50赏金?先谢了!
 
后退
顶部