2016-12-22 4 views
1

내가 자바에 새로운 오전이 내가해야 할 일이다 합계 1, 1, 2, 3, 5, 8, 13, 21, .... 등피보나치 시퀀스 다음과 같이</p> <p>순서 간다 : 모든 숫자

시퀀스의 다음 번호는 이전 2 번호

의 합계가 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이 될 때까지 인쇄 할 수 없습니다.

+0

의 결과를 요약합니다 피보나치 숫자의 합계를 얻으려는 시도 ... –

+0

코드와 @TimothyTruckle을 편집합니다. –

+1

@JohnSmith * "어떻게 해야할지 모르겠다"* 어쩌면 당신이 어떻게 작성할지 생각해보십시오. 종이에, 단계적으로하십시오. –

답변

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은 완전한 기능 코드입니다!

+0

감사합니다. 너 너무 많이 도와 줘! –

1

이미 피보나치 수를 반환했습니다.

피보나치 수 + 합계를 반환하려면 메서드 유형을 쌍으로 변경해야합니다.

당신은 단지 그 방법에 다음 줄을 추가, 합계를 인쇄하려면 :

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); 
    ... 
} 
+0

도움을 주셔서 대단히 감사합니다! –

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

    } 
+0

도와 주셔서 대단히 감사합니다! –

+0

그래서 당신은 그녀에게 물고기를주었습니다. 너도 그녀에게 다음 물고기를 줄래? 아니면 그녀가 낚시를 배우기를 바랄거야? –

+0

당신은 대단히 존경 받고 있으며 코드에서 볼 수 있듯이 자바 [명명 규칙] (http://www.javatpoint.com/java-naming-conventions)를 검토하는 것이 좋습니다. 클래스 이름의 첫 글자는 대문자로 표기해야합니다 , 일부 알고리즘을 연구 할 수도 있습니다. 마음을 편하게하기 위해 [coursera] (https://www.coursera.org/specializations/algorithms)를 권장합니다. –