繁体   English   中英

我怎样才能添加序列?

[英]How can I add up the sequence?

#include <stdio.h>

int f(int n) {
    if (n == 0)
        return 0;
    else if (n == 1)
        return 1;
    else if (n == 2)
        return 2;
    else
        return f(n - 3) + f(n - 2) + f(n - 1);
}

int sum(int x) {
    if (x == 0)
        return f(0);
    else
        return f(x) + sum(x - 1) + sum(x-2);
}

int main() {
    int input;
    scanf_s("%d", &input);
    printf("%d", sum(input));
}

Fn 是定义为的序列
f0 = 0, f1 = 1, f2 = 2, f3 = f2 + f1 + f0, fn = fn-3 + fn-2 + fn-1

sum() 定义为
总和(n)=(f0)+(f0+f1)+(f0+f1+f2)+....+(f0+f1+...+fn)

输入第n个数的output应该是这样的
输入 / output = 0/0、1/1、2/4、4/22

我发现 sum() 可以写成
f(0)x5 + f(1)x4 + f(2)x3 + f(3)x2 + f(4)x1,如果 n 为 4。
有没有办法通过递归来做到这一点?

根据你的公式,output,你想要一个递归的解决方案,我写了一个代码。 它正在使用您的输入,我希望其他输入也能正常工作。

#include <stdio.h>

int f(int n) {
    if (n == 0)
        return 0;
    else if (n == 1)
        return 1;
    else if (n == 2)
        return 2;
    else
        return f(n - 3) + f(n - 2) + f(n - 1);
}

int sum(int x) {
    int total=f(x);
    if (x == 0)
        return 0;
    else{
        total += sum(x-1);
        return total;
    }
}

int total_of_sums(int x){
    int total=sum(x);
    if (x==0)
        return 0;
    else{
        total +=total_of_sums(x-1);
        return total;
    }
}

int main() {
    int input;
    scanf("%d", &input);
    printf("%d", total_of_sums(input));
}

似乎sum()的递归辅助函数可以解决问题:

#include <stdio.h>
#include <stdlib.h>

int f(int n) {
    if (n < 3)
        return n;

    return f(n - 3) + f(n - 2) + f(n - 1);
}

int sum_recursive(int n, int x) {
    if (x == 1)
        return f(n);

    return f(n) * x + sum_recursive(n + 1, x - 1);
}

int sum(int x) {
    return sum_recursive(0, x + 1);
}

int main(int argc, char *argv[]) {
    printf("%d\n", sum(atoi(argv[1])));
}

OUTPUT

> ./a.out 0
0
> ./a.out 1
1
> ./a.out 2
4
> ./a.out 3
10
> ./a.out 4
22
>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM