0

我的任务是

在屏幕上显示进程 {x i } 的 n 元素。

X i = X i-1 - 3X i-2
X 0 = 0
X 1 = 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 中编写代码不是很必要

4

2 回答 2

1

您误解了级数公式。Xi-1Xi-2参考在您的进度中计算的先前元素。

因此,您需要两个变量,它们将携带您刚刚计算的先前值。在任何给定的循环中,您使用通用级数公式计算当前Xi值,然后将 的值复制Xi-1到中Xi-2,并抛出 的前一个值Xi-2Xi然后将(到现在的当前值)的值复制到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);
  }
}
于 2015-04-03T14:38:42.390 回答
0

给定这个生成函数:

    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 的计算中),但是我们没有存储这个值,所以我们需要计算两次。

于 2015-04-03T14:34:08.067 回答