斐波纳契数列:所有数字的总和

时间:2016-12-22 23:02:15

标签: java for-loop netbeans add fibonacci

我是Java的新手,这就是我必须要做的事情:

序列如下:1,1,2,3,5,8,13,21 ......等等。

序列中的下一个数字是前两个数字的总和

编写一个程序,让用户输入一个数字n,然后计算序列的第n个数字和序列中数字的总和。

例如,第5个数字是5,并且该数字的总和是12

这不是重复,因为我的问题与其他问题不同,我的代码也不同。以下是我到目前为止所做的事情:

public class fibonnacifinal {

    public static void main(String args[]) {
        System.out.println("Enter number upto which Fibonacci series to print: ");
        int number = new Scanner(System.in).nextInt();
        System.out.println("\n Fibonacci number at location " + number + " is ==> " + (fibonacciLoop(number) + ""));
    }

    public static int fibonacciLoop(int number) {
        if (number == 1 || number == 2) {
            return 1;
        }

        int fibo1 = 1, fibo2 = 1, fibonacci = 1;
        for (int i = 3; i <= number; i++) {
            fibonacci = fibo1 + fibo2; // Fibonacci number is sum of previous two Fibonacci number
            fibo1 = fibo2;
            fibo2 = fibonacci; 
        }
        return fibonacci; // Fibonacci number
    }
}

我遇到的问题是我无法添加和打印数字。例如,如果用户输入7,我可以说第7个数字是13,但我不能打印到该数字为33的总和。

3 个答案:

答案 0 :(得分:2)

当您从i = 3开始时,您可以在fibonacciLoop(int number)内使用以下内容:

int sum = 2;
for (int i = 3; i <= number; i++) {
    fibonacci = fibo1 + fibo2; 
    fibo1 = fibo2;
    fibo2 = fibonacci;
    sum = sum + fibonacci;
}
System.out.println("Sum: " +sum); //print before return fibonacci

注意,很快int sum会因大的斐波纳契数而溢出。

Here是一个完整的功能代码!

答案 1 :(得分:1)

您已退回斐波纳契数字。

如果你想同时返回:Fibonacci数+总和,你需要将方法类型改为一对。

如果您只想打印总和,请在该方法中添加以下行:

public static int fibonacciLoop(int number) {
    int sum = 0;
    if (number == 1) { // 1
        System.out.println("1");
    } else if (number == 2) { // 1, 1
        System.out.println("2");
    } else {
        sum = 2;
    }
    ...
    for (int i = 3; i <= number; i++) {
        ...
        sum += fibonacci;
    }
    System.out.println(sum);
    ...
}

答案 2 :(得分:1)

你只需要将每个斐波纳契的结果相加

    public class Fibonnacifinal {
        public static void main(String args[]) {
            System.out
                    .println("Enter number upto which Fibonacci series to print: ");
            int number = new Scanner(System.in).nextInt();
            System.out.println("\n Sum of Fibonacci numbers at location " + number
                    + " is ==> " + (fibonacciLoop(number) + ""));
        }

        public static int fibonacciLoop(int number) {
            // Fib(1) = 1, returns 1
            // Fib(2) = 2, returns 2 which is the sum of Fib(1) + Fib(1)
            if (number < 3) {
                return number;
            }

            int sum = 2; // 2 is the sum till Fib(2)
            int fibo1 = 1, fibo2 = 1, fibonacci = 1;
            for (int i = 3; i <= number; i++) {
                fibonacci = fibo1 + fibo2;
                sum += fibonacci;
                fibo1 = fibo2;
                fibo2 = fibonacci;
            }

            return sum;
        }

    }