在屏幕上显示进程的 n 个元素
Show on the screen n-element of the progression
我的任务是
Show on the screen n-element of the progression {xi}.
Xi = Xi-1 - 3Xi-2
X0 = 0
X1 = 2
i = [2,n]
这里已经完成了,但是我对这个主题不是很了解,所以我需要一些帮助。
我的代码(不起作用):
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = Edit1->Text.ToInt();
int i, x;
if(n==0){
i=0;
Label1->Caption = IntToStr(i);
}
if(n==1){
i=2;
Label1->Caption = IntToStr(i);
}
else {
for(i=2;i<=n;i++){
x=(i-1)-3*(i-2);
Label1->Caption = IntToStr(x);
}
}
}
用C++ Builder写代码不是很必要
给出这个生成函数:
X_0 = 0
X_1 = 2
X_i = X_{i-1} + 3*X_{i-2} i = [2,n]
你会如何计算 x_4?我们知道 X_4 = X_3 + 3*X_2;这意味着我们需要能够计算 X_3 和 X_2。我们可以这样写:
X_2 = X_1 + 3*X_0 = 2 + 3*0 = 2
X_3 = X_2 + 3*X_1 = 2 + 3*2 = 8
X_4 = X_3 + 3*X_2 = 8 + 3*2 = 14
这通常可以写成递归函数:
int calcSeries(int n)
{
if(0 == n)
return 0;
if(1 == n)
return 2;
return calcSeries(n-1) + 3*calcSeries(n-2)
}
顺便说一句,这是本系列的一个非常幼稚的实现,主要问题是我们有两个递归树;如果您查看上面 X_4 的扩展,请注意 X_2 出现两次(在 X_3 和 X_4 的计算中),但我们不存储此值我们需要计算两次。
您误解了递增公式。 Xi-1
和 Xi-2
指的是在您的进度中计算的先前元素。
因此您需要两个变量,它们将携带您刚刚计算的先前值。在任何给定循环中,您使用一般级数公式计算当前 Xi
值,然后将 Xi-1
的值复制到 Xi-2
,抛出 Xi-2
的先前值。然后将 Xi
的值(到现在的当前值)复制到 Xi-1
.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = Edit1->Text.ToInt();
int i, x;
int xim1, xim2
if(n==0){
i=0;
Label1->Caption = IntToStr(i);
}
if(n==1){
i=2;
Label1->Caption = IntToStr(i);
}
else {
xim1 = 2;
xim2 = 0;
for(i=2;i<=n;i++){
x = xim1-3*xim2;
xim2 = xim1;
xim1 = x;
}
Label1->Caption = IntToStr(x);
}
}
我的任务是
Show on the screen n-element of the progression {xi}.
Xi = Xi-1 - 3Xi-2
X0 = 0
X1 = 2
i = [2,n]
这里已经完成了,但是我对这个主题不是很了解,所以我需要一些帮助。 我的代码(不起作用):
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = Edit1->Text.ToInt();
int i, x;
if(n==0){
i=0;
Label1->Caption = IntToStr(i);
}
if(n==1){
i=2;
Label1->Caption = IntToStr(i);
}
else {
for(i=2;i<=n;i++){
x=(i-1)-3*(i-2);
Label1->Caption = IntToStr(x);
}
}
}
用C++ Builder写代码不是很必要
给出这个生成函数:
X_0 = 0
X_1 = 2
X_i = X_{i-1} + 3*X_{i-2} i = [2,n]
你会如何计算 x_4?我们知道 X_4 = X_3 + 3*X_2;这意味着我们需要能够计算 X_3 和 X_2。我们可以这样写:
X_2 = X_1 + 3*X_0 = 2 + 3*0 = 2
X_3 = X_2 + 3*X_1 = 2 + 3*2 = 8
X_4 = X_3 + 3*X_2 = 8 + 3*2 = 14
这通常可以写成递归函数:
int calcSeries(int n)
{
if(0 == n)
return 0;
if(1 == n)
return 2;
return calcSeries(n-1) + 3*calcSeries(n-2)
}
顺便说一句,这是本系列的一个非常幼稚的实现,主要问题是我们有两个递归树;如果您查看上面 X_4 的扩展,请注意 X_2 出现两次(在 X_3 和 X_4 的计算中),但我们不存储此值我们需要计算两次。
您误解了递增公式。 Xi-1
和 Xi-2
指的是在您的进度中计算的先前元素。
因此您需要两个变量,它们将携带您刚刚计算的先前值。在任何给定循环中,您使用一般级数公式计算当前 Xi
值,然后将 Xi-1
的值复制到 Xi-2
,抛出 Xi-2
的先前值。然后将 Xi
的值(到现在的当前值)复制到 Xi-1
.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = Edit1->Text.ToInt();
int i, x;
int xim1, xim2
if(n==0){
i=0;
Label1->Caption = IntToStr(i);
}
if(n==1){
i=2;
Label1->Caption = IntToStr(i);
}
else {
xim1 = 2;
xim2 = 0;
for(i=2;i<=n;i++){
x = xim1-3*xim2;
xim2 = xim1;
xim1 = x;
}
Label1->Caption = IntToStr(x);
}
}