피보나치 수열을 재귀(recursion) 기법을 사용하지 않고 구하는 방법을 알아보겠습니다. 이 방식에서는 사용자로부터 입력값을 받은 뒤, while 반복문을 활용해 수열의 숫자들을 차례대로 계산합니다.
예제 코드
아래는 while 반복문으로 피보나치 수열을 출력하는 전체 코드입니다.
first_num = int(input("피보나치 수열의 첫 번째 수를 입력하세요... "))
second_num = int(input("피보나치 수열의 두 번째 수를 입력하세요... "))
num_of_terms = int(input("출력할 항의 개수를 입력하세요... "))
print(first_num, second_num)
print("피보나치 수열의 숫자들 : ")
while(num_of_terms - 2):
third_num = first_num + second_num
first_num = second_num
second_num = third_num
print(third_num)
num_of_terms = num_of_terms - 1실행 결과
피보나치 수열의 첫 번째 수를 입력하세요... 2 피보나치 수열의 두 번째 수를 입력하세요... 8 출력할 항의 개수를 입력하세요... 8 2 8 피보나치 수열의 숫자들 : 10 18 28 46 74 120
코드 설명
- 사용자로부터 첫 번째 수와 두 번째 수를 입력받습니다.
- 출력할 항의 개수 역시 사용자에게 입력받습니다.
- 첫 번째 수와 두 번째 수를 콘솔에 먼저 출력합니다.
- 이후 while 반복문이 시작되며, 루프가 돌 때마다 다음 과정이 수행됩니다.
- 첫 번째 수와 두 번째 수를 더한 값을 세 번째 변수(third_num)에 저장합니다.
- 두 번째 수의 값을 첫 번째 수에 대입하고, 세 번째 수의 값을 두 번째 수에 대입하여 자리를 이동시킵니다.
- 새로 계산된 세 번째 수를 콘솔에 출력합니다.
- 남은 항의 개수를 1씩 감소시키며, 개수가 소진되면 반복문이 종료됩니다.
참고: 재귀 방식과의 차이점
재귀 함수를 사용하면 코드가 간결해 보일 수 있지만, 같은 값을 여러 번 중복 계산하게 되어 항의 개수가 많아질수록 실행 속도가 크게 느려집니다. 반면 위 예제처럼 반복문을 활용한 반복적(iterative) 방식은 각 항을 한 번씩만 계산하므로 시간 복잡도가 O(n)으로 효율적이며, 스택 오버플로우와 같은 재귀 호출 깊이 제한 문제에서도 자유롭습니다.