我在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从键盘扫描A
和B
。
这是我的尝试,我知道如何打印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错误我。
答案 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 。
实施留作练习。重要的诀窍是,您需要记住的所有内容(例如,存储在两个变量a
和b
中)是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);
}
这不是一种有效的解决方案,只是一种练习。