An=An-2+2An-1,求当M=100 1000 10000,满足Sn<M Sn+1>=M,S=A1+A2+...+An,输出对应的n
#include <stdio.h>
int main() {
int M[] = {100, 1000, 10000};
int n;
for (int i = 0; i < 3; i++) {
int a[100] = {1, 1};
int sum = 2;
while (sum < M[i]) {
n++;
a[n] = a[n - 2] + 2 * a[n - 1];
sum += a[n];
}
printf("M=%d, n=%d\n", M[i], n);
n = 0;
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以给出一个数学上的优化提议,但是无法给出具体的代码实现。 对于一个给定的An,在进行下一步计算An+1时,我们只需要知道An和An-1,而不需要知道之前的任何项。因此,我们可以使用一个两个元素的数组来保存相邻两项的值,并通过更新这个数组来计算后续的An和Sn。这个做法可以避免在计算过程中开辟大量的内存空间,从而在一定程度上提高运行效率。 另外,我们可以使用递推的方式来计算An和Sn,而不需要使用递归。递推效率更高,无法引起堆栈溢出等问题。