代码之家  ›  专栏  ›  技术社区  ›  Program-Me-Rev

如何计算每个项相乘并相加的结果[结束]

c
  •  -4
  • Program-Me-Rev  · 技术社区  · 6 年前

    假设我有10件东西。我把这10样东西送到世界上,每10样东西都会得到另外10样。

    这不是Fibonacci,它将被复制到代码中:

    int fibonacci(int i) {
        if (i == 0) {
            return 0;
        }
        if (i == 1) {
            return 1;
        }
        return fibonacci(i - 1) + fibonacci(i - 2);
    }
    
    int main() {
        int i;
    
        for (i = 0; i < 10; i++) {
            printf("%d\t\n", fibonacci(i));
        }
        return 0;
    }
    
    1. 我怎样才能做到这一点 C类 直到 第7名 周期
    2. 这似乎是统计学上的问题。我应该研究什么课题。

    谢谢大家抽出时间。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Alnitak    6 年前

    您似乎希望 geometric progression ,a*r^n与 a == 1 r == 10 .

    我甚至不介意递归:

    #include <stdio.h>
    #include <math.h>
    #include <stdint.h>
    
    double partial_sum(double a, double r, size_t n) {
        double x = 0;
        for (size_t i = 0; i < n; ++i) {
            x += pow(r, i);
        }
        return x;
    }
    
        2
  •  1
  •   Domso    6 年前

    自从你提到 fibonacci ,我把你的问题理解为 How to handle a recursion-tree with a degree of 10? (每个递归步骤创建10个新实例)

    #include <stdio.h>
    int fibonacci(int i) {
        if (i <= 0) {
            return 0;
        }
        if (i == 1) {
            return 1;
        }    
    
        int result = 0;
        for (int j = 1; j <= 10; j++) {
            result += fibonacci(i - j); //create 10 new instances in each call
        }
    
        return result;
    }
    
    int main() {
        int i;
    
        for (i = 0; i < 10; i++) {
            printf("%d\t\n", fibonacci(i));
        }
        return 0;
    }
    

    注意:树的深度不会随着度数的增加而增加,因此所需的堆栈大小保持不变。