需要在不使用数组

时间:2015-12-11 20:27:10

标签: java loops sequences

我在CompSci类简介中有这个作业。我们的教授说代码很容易做,我们只需要用数学解决纸上的任务。这是作业(注意:我们不能使用数组或任何类似的东西,我们只能使用循环和if):

  

对于序列X 0 的元素,X 1 ,X 2 ,...,X n 它代表X 0 = 5,X 1 = - 1,...,X n + 2 + 2X 的n + 1 + X <子>名词 = 0。我们需要编写一个程序来扫描k的值并打印出X k

对于最大点,我们需要使X 1 = A,X 2 = B从键盘扫描AB

这是我的尝试,我知道如何打印X k 但我不知道要打印什么(因为这是Java我只会复制我的主要内容):< / p>

Scanner in = new Scanner(System.in);
int k=in.nextInt();

int a = 5;
int b = -1;
for(i=3;i<=k;i++)
{

}

我知道这可能会让任何人在这里贬低,但我真的陷入困境,我不知道如何解决这个问题。我有不同类型的类似任务的例子我很容易解决,但这部分X n + 2 + 2X n + 1 + X n = 0错误我。

2 个答案:

答案 0 :(得分:0)

所以,规则是

  

X n + 2 + 2 * X n + 1 + X n = 0

所以X n + 2 的值是

  

X n + 2 = 0 - 2 * X n + 1 - X n

由于您知道X 0 和X 1 ,因此您可以使用该规则计算X 2 。由于您现在知道X 2 和X 1 ,因此您可以使用该规则计算X 3 。由于您现在知道X 3 和X 2 ,因此您可以使用该规则计算X 4 。你可以继续,直到你知道X k

实施留作练习。重要的诀窍是,您需要记住的所有内容(例如,存储在两个变量ab中)是X n + 1 的前两个值, X n ,能够计算X n + 2

答案 1 :(得分:0)

如前所述

  

X n + 2 = 0 - 2 * X n + 1 - X n

现在,替换

  

n = k - 2

你得到了

  

X k = - 2 * X k-1 - X k-2

现在,编写一个返回X k

的函数
int x(int k) {
   return -2 * x(k - 1) - x(k - 2);
}

现在这显然是一个无限递归,所以通过引入已知值和限制来修复它:

int x(int k) {
   if (k < 0) throw new runtimeException();
   if (k == 0) return 5;
   if (k == 1) return -1;
   return -2 * x(k - 1) - x(k - 2);
}

这不是一种有效的解决方案,只是一种练习。

相关问题