자바 언어의 피보나치 수

Jaba Eon Eoui Pibonachi Su



피보나치 수는 0에서 시작하여 양의 무한대까지 양(정수) 정수의 특정 시퀀스입니다. 현재 피보나치 수는 바로 앞의 두 피보나치 수를 더하여 얻습니다. 바로 앞의 두 피보나치 수는 단순한 숫자가 아닙니다.

사실 처음 두 개의 피보나치 수는 미리 정의되어 있습니다. 첫 번째 피보나치 수는 0이고 두 번째 피보나치 수는 1입니다. 0부터 시작하는 인덱싱을 사용하고 피보나치 수가 배열에 있다고 가정하면 다음과 같습니다.

인덱스에서 0 , 피보나치 수는 0 , ( 미리 정의된 ) ;

인덱스에서 1 , 피보나치 수는 1 , ( 미리 정의된 ) ;

인덱스에서 , 피보나치 수는 1 = 1 + 0 , ( 정의에 의해 ) ;

인덱스에서 , 피보나치 수는 = 1 + 1 , ( 정의에 의해 ) ;

인덱스에서 4 , 피보나치 수는 = + 1 , ( 정의에 의해 ) ;

인덱스에서 5 , 피보나치 수는 5 = + , ( 정의에 의해 ) ;

인덱스에서 6 , 피보나치 수는 8 = 5 + , ( 정의에 의해 ) ;

인덱스에서 7 , 피보나치 수는 13 = 8 + 5 , ( 정의에 의해 ) ;

인덱스에서 8 , 피보나치 수는 이십 일 = 13 + 8 , ( 정의에 의해 ) ;

인덱스에서 9 , 피보나치 수는 3. 4 = 이십 일 + 13 , ( 정의에 의해 ) ;

등등.







프로그래밍에서 i가 아닌 변수 n은 이러한 피보나치 수에 대한 0부터 시작하는 인덱스에 사용됩니다. 그리고 처음 12개의 피보나치 수는 다음과 같습니다.



0 1 1 5 8 13 이십 일 3. 4 55 89
0 1 4 5 6 7 8 9 10 열하나

테이블의 두 번째 행은 0부터 시작하는 인덱스를 제공하며 각 인덱스는 프로그래밍에서 변수 n을 갖습니다. 첫 번째 행은 해당하는 피보나치 수를 제공합니다. 따라서 피보나치 수는 단순한 숫자가 아닙니다. 핵심 정의는 첫 번째 피보나치 수에 대해 0으로 시작하고 두 번째 피보나치 수에 대해 1로 시작합니다. 나머지 숫자는 거기에서 생성됩니다.



피보나치 수는 O(n) 시간과 O(1) 시간에 생성될 수 있습니다. O(n) 시간의 경우 예를 들어 n이 12이면 처음 12개의 피보나치 수가 생성됩니다. O(1) 시간 동안 하나의 피보나치 수만 생성됩니다. 예를 들어, n이 6이면 피보나치 수 8이 생성됩니다.





이 기사에서는 Java에서 피보나치 수를 생성하는 두 가지 방법에 대해 설명합니다.

피보나치 수 공식

피보나치 수에는 수학 공식이 있습니다. 이 공식은 세 줄 또는 한 줄로 작성할 수 있습니다. 세 줄로 다음과 같이 작성됩니다.

여기서 F N 는 0부터 시작하는 n에서의 피보나치 수입니다. 인덱스. 피보나치 수는 이렇게 정의됩니다.



O(n) 시간에 피보나치 수 생성하기

피보나치 수를 O(3)번으로 생성하면 0, 1, 1이 생성됩니다. 그것들은 처음 세 개의 피보나치 수입니다. 마지막 0부터 시작하는 n 여기서 인덱스는 2입니다. 피보나치 수를 O(7)번으로 생성하면 0, 1, 1, 2, 3, 5, 8이 생성됩니다. 그것들은 처음 7개의 피보나치 수입니다. 마지막 0부터 시작하는 n 여기서 인덱스는 6입니다. 피보나치 수를 O(n)번 생성하려면 0, 1, 1, 2, 3, 5, 8 - - -가 생성됩니다. 그것들은 처음 n개의 피보나치 수입니다. 마지막 0부터 시작하는 n 여기서 인덱스는 n-1입니다.

처음 n개의 피보나치 수를 생성하는 클래스의 Java 메서드는 다음과 같습니다.

수업 피보나치 {
무효의 피보나치 ( 정수 [ ] ) {
정수 N = 피. 길이 ;
만약에 ( N > 0 )
[ 0 ] = 0 ;
만약에 ( N > 1 )
[ 1 ] = 1 ;
~을 위한 ( 정수 = ; < N ; ++ ) { //n=0 및 n=2가 고려되었습니다.
정수 커No = [ - 1 ] + [ - ] ;
[ ] = 커No ;
}
}
}

피보나치 클래스는 비공개입니다. 그만큼 피보나치() 메소드는 배열 P를 취하고 void를 리턴합니다. 이 방법은 배열의 길이를 결정하는 것으로 시작됩니다. 이 길이 n은 필요한 피보나치 수입니다. 첫 번째 및 두 번째 피보나치 수는 명시적으로 결정되어 배열의 첫 번째 및 두 번째 위치에 배치됩니다.

세 번째(인덱스, n = 2)부터 시작하는 나머지 피보나치 수는 for 루프에서 결정되고 배열의 해당 위치에 배치됩니다. 따라서 함수는 void를 반환해야 합니다. for 루프의 주요 문은 이전 두 숫자를 더합니다.

명확성을 위해 인덱스 변수 i가 n 대신 사용되었습니다.

적절한 Java Main 클래스(Java 기본 메서드 포함)는 다음과 같습니다.

공공의 수업 기본 {
공공의 공전 무효의 기본 ( 인수 [ ] ) {
정수 = 12 ;
정수 [ ] = 새로운 정수 [ ] ;
피보나치 오브제 = 새로운 피보나치 ( ) ;
사물 피보나치 ( ) ;
~을 위한 ( 정수 = 0 ; < ; ++ )
체계 . 밖으로 . 인쇄 ( [ ] + ' ' ) ;
체계 . 밖으로 . 인쇄 ( ) ;
}
}

fibonacci() 메소드에 의해 숫자가 생성된 후 Java 기본 메소드가 숫자를 읽습니다.

일정한 시간에 하나의 피보나치 수 생성하기

해당하는 0부터 시작하는 인덱스 n이 주어지면 피보나치 수를 생성하는 데 사용할 수 있는 수학 공식이 있습니다. 공식은 다음과 같습니다.

여기서 n은 0부터 시작하는 인덱스이고 Fib는 N 해당하는 피보나치 수입니다. 방정식의 오른쪽에서 n의 거듭제곱은 5의 제곱근이 아닙니다. n의 거듭제곱은 괄호 안의 표현식입니다. 그런 표현이 두 가지 있습니다.

n이 0이면 Fib N 0입니다. n이 1이면 Fib N n이 2이면 Fib N 1이 됩니다. n이 3이면 Fib N 2가 됩니다. n이 4이면 Fib N 3 등일 것입니다. 독자는 n에 다른 값을 대입하고 평가하여 이 공식을 수학적으로 확인할 수 있습니다.

코딩할 때 이 공식은 n에 대해 단 하나의 피보나치 수를 생성합니다. 둘 이상의 피보나치 수가 필요한 경우 수식의 코드는 서로 다른 해당 인덱스 각각에 대해 한 번씩 호출되어야 합니다.

Java에서 피보나치 수를 하나만 생성하는 방법은 다음과 같습니다.

수입 java.lang.* ;

수업 악의 없는 거짓말 {
더블 fibNo ( 정수 N ) {
더블 섬유질 = ( 수학 . ( ( 1 + 수학 . 평방 미터 ( 5 ) ) / , N ) 수학 . ( ( 1 - 수학 . 평방 미터 ( 5 ) ) / , N ) ) / 수학 . 평방 미터 ( 5 ) ;
반품 섬유질 ;
}
}

java.lang.* 패키지는 프로그램 시작 시 가져와야 했습니다. 이는 패키지에 거듭제곱(pow) 및 제곱근(sqrt) 메서드가 있는 Math 클래스가 있기 때문입니다. 여기서 사용자 정의 Java 메소드는 수학 공식을 직접 구현합니다.

이 함수의 시간 복잡도는 O(1)이며, 하나의 주요 작업에 대해 일정하게 길들여집니다. 위의 방법에 대한 Java 기본 방법이 있는 적절한 Java 기본 클래스는 다음과 같습니다.

공공의 수업 기본 {
공공의 공전 무효의 기본 ( 인수 [ ] ) {
정수 N = 열하나 ;
피브 오브제 = 새로운 악의 없는 거짓말 ( ) ;
더블 오른쪽 = 오브제. fibNo ( N ) ;
체계 . 밖으로 . 인쇄 ( 오른쪽 ) ;
}
}

인덱스 n = 11이 전송되고 피보나치 수인 89가 반환됩니다. 출력은 다음과 같습니다.

89.00000000000003

불필요한 십진수는 제거할 수 있지만 이는 다른 시간에 대한 논의입니다.

결론

피보나치 수는 정수의 특정 시퀀스입니다. 현재 번호를 얻으려면 바로 이전에 해당하는 두 번호를 더하십시오. 전체 수열에 대해 처음 두 개의 피보나치 수(0 다음에 1)가 미리 선언됩니다. 나머지 피보나치 수는 거기에서 생성됩니다.

인덱스 2에서 인덱스 n-1에 해당하는 피보나치 수를 생성하려면 주요 문과 함께 for 루프를 사용합니다.

정수 커No = [ - 1 ] + [ 나 - ] ;

여기서 currNo는 현재 피보나치 수이고 P는 n개의 숫자를 저장할 배열입니다.

0부터 시작하는 인덱스 n에서 단 하나의 피보나치 수를 생성하려면 수학 공식을 사용하십시오.