public class Quiz { // !!! 可以根据需要添加另外的函数与变量 // 数列前2项为 1 1,从第3项开始,若为奇数项,则值为前两项之和,若为偶数项,则值为前两项之和的2倍 // 可知该数列前6项为 1 1 2 6 8 28 // 求该数列的第n项 // 请用递归和循环两种方式实现 public static long getN(int n) { }
时间: 2024-02-22 20:54:49 浏览: 69
AnswersQuiz1.zip_软件设计/软件工程_Visual_Basic_
使用递归方式实现:
```
public static long getN(int n) {
if (n <= 2) {
return 1;
}
if (n % 2 == 1) {
return getN(n - 1) + getN(n - 2);
} else {
long a = getN(n - 1);
long b = getN(n - 2);
return 2 * (a * a + b * b);
}
}
```
使用循环方式实现:
```
public static long getN(int n) {
if (n <= 2) {
return 1;
}
long a = 1, b = 1, c = 0;
for (int i = 3; i <= n; i++) {
if (i % 2 == 1) {
c = a + b;
} else {
c = 2 * (a * a + b * b);
}
a = b;
b = c;
}
return c;
}
```
注意:递归方式可能会出现栈溢出的问题,而循环方式可以避免这个问题。
阅读全文