多项式的猜想An=An-2+2An-1,求当M=100 1000 10000,满足Sn<M Sn+1>=M,S=A1+A2+...+An

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;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以给出一个数学上的优化提议,但是无法给出具体的代码实现。 对于一个给定的An,在进行下一步计算An+1时,我们只需要知道An和An-1,而不需要知道之前的任何项。因此,我们可以使用一个两个元素的数组来保存相邻两项的值,并通过更新这个数组来计算后续的An和Sn。这个做法可以避免在计算过程中开辟大量的内存空间,从而在一定程度上提高运行效率。 另外,我们可以使用递推的方式来计算An和Sn,而不需要使用递归。递推效率更高,无法引起堆栈溢出等问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^