예제 11-3에서도 이전까지의 최솟값, 최댓값을 가지고 있는 튜플의 요소를 각각 수정했기 때문에 코드가 엄청나게 달라 보이지는 않는다. 좀 더 의미 있는 예로 피보나치 수열2의 시퀀스를 IEnumerable<int> 타입으로 반환하는 메서드의 예를 살펴보자. 대단한 것처럼 보이지는 않지만, C#의 yield라는 키워드를 활용하면 손쉽게 코드를 개발할 수 있다. 다음 예는 C# 6에서도 수행할 수 있다.
예제 11-5 튜플을 사용하지 않고 구현한 피보나치 수열 ▶ FibonacciWithoutTuples.cs
static IEnumerable<int> Fibonacci()
{
int current = 0;
int next = 1;
while (true)
{
yield return current;
int nextNext = current + next;
current = next;
next = nextNext;
}
}
피보나치 수열을 계산하려면 current(현재 값)와 next(다음 값)를 계속 저장하고 있어야 하며, 매 반복마다 current 값을 next 값으로, next 값을 nextNext(next의 그다음 값) 값으로 변경해야 한다. 이를 위해서는 또 하나의 임시 변수가 필요한데, current 값에 next 값을 할당해 버리면 현재의 current 값을 잃어 버리기 때문이다.
2 0, 1로 시작하고, 그다음 수는 수열의 앞쪽 두 수를 합한 형태로 계산되는 수열