简体   繁体   English

用户输入数字的斐波那契函数

[英]Fibonacci function for user input numbers

I'm making a program like Fibonacci series, but for numbers up to the value provided by user, example: 0 to 5 (0, 1, 2, 3, 4).我正在制作一个像斐波那契数列这样的程序,但是对于不超过用户提供的值的数字,例如:0 到 5 (0, 1, 2, 3, 4)。 Program needs to calculate the sum of numbers, move to right and calculate other five numbers.程序需要计算数字的总和,向右移动并计算其他五个数字。 It's working for Fibonacci series, but not for higher numbers.它适用于斐波那契数列,但不适用于更高的数字。 Does anyone know how to do this?有谁知道如何做到这一点?

#include <stdio.h>


int main() {

    int gg; //number which user inputs
    int dg = 0; //first number
    int next = 0;
    int n;
    int i;

    printf("Number of series: ");
    scanf("%d", &gg);

    printf("Positive integer: ");//max number which outputs in printf("Series: \n", gg), etc. 1000;
    scanf("%d", &n);

    printf("Series: \n", gg); //result

    for (i = 0; i < gg; i++) {
        printf("%d, ", i);
    }

    next = gg + dg;

    while(next <= n){
        printf("%d, ", next);
        dg = gg;
        gg = next;
        next = gg + dg;
    }

    return 0;
}

For values 0 to 5 it should output:对于 0 到 5 的值,它应该输出:

0, 1, 2, 3, 4, 10, 20, 39, 76, 149, 294...

But it outputs:但它输出:

0, 1, 2, 3, 4, 5, 10, 15, 25, 40, 65, 105, 170, 275,

You need save the last nth values, not just the last two values.您需要保存最后的第 n 个值,而不仅仅是最后两个值。 In your example you need to store the last five values.在您的示例中,您需要存储最后五个值。 You can use an array for this:您可以为此使用数组:

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

int main() {
    int series_number;
    int *previous_numbers;
    int marker = 0;
    int max_series_value;
    int next = 0;

    printf("Number of series: ");
    scanf("%d", &series_number);

    printf("Positive integer: ");
    scanf("%d", &max_series_value);

    printf("Series %d: \n", series_number);

    previous_numbers = malloc(sizeof *previous_numbers *series_number);
    for (int i = 0; i < series_number; i++) {
        printf("%d, ", i);
        previous_numbers[i] = i;
        next += i;
    }
    previous_numbers[marker] = next;
    marker = (marker+1) % series_number;

    while(next <= max_series_value){
        printf("%d, ", next);
        next = 0;
        for (int i = 0; i < series_number; i++) {
            next += previous_numbers[(marker+i) % series_number];
        }
        previous_numbers[marker] = next;
        marker = (marker+1) % series_number;
    }
    free(previous_numbers);

    return 0;
}

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

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