N310 yield (Fibonacci)
Skab en tom console-app med to statiske metoder som begge returnerer Fibonacci-numre:
- IEnumerable<
> Fibinacci1(int count) - IEnumerable<
> Fibonacci2(int count)
Fibonacci-numre beregnes ved at lægge to to forrige numre sammen i en talrække, og er en af de mest facinerende talrækker i matematikken (se WikiPedia).
Hvis man antager at det første nummer er 0 og de næste en ser talrækken således ud:
(0) 1 1 2 3 5 8 13 21 34 55
0+1=1, 1+1=2, 1+2=3, 2+3=5 osv
Du skal altså skabe to metoder. Den første metode Fibinacci1 skal blot skabe en liste af Fibonacci-tal og returnere denne som en IEnumerable
Den anden metode Fibinacci2 beregner også numrerne men metoden skal ikke første danne listen og returnere denne, men i stedet returnere et output løbende (yield return) som kan for-each’es. Men kaldet mod metoden er det samme:
Klik for at se et forslag til en løsning
using System;
using System.Collections.Generic;
namespace samlinger_fibonacci
{
class Program
{
static void Main(string[] args)
{
foreach (var item in Fibonacci1(10))
{
Console.WriteLine(item);
}
foreach (var item in Fibonacci2(10))
{
Console.WriteLine(item);
}
}
static IEnumerable<int> Fibonacci1(int count)
{
int prevFib1 = 1;
int currFib1 = 1;
List<int> lst = new List<int>();
for (int i = 0; i < count; i++)
{
lst.Add(prevFib1);
int newFib1 = prevFib1 + currFib1;
prevFib1 = currFib1;
currFib1 = newFib1;
}
return lst;
}
static IEnumerable<int> Fibonacci2(int count)
{
int prevFib2 = 1;
int currFib2 = 1;
for (int i = 0; i < count; i++)
{
yield return prevFib2;
int newFib2 = prevFib2 + currFib2;
prevFib2 = currFib2;
currFib2 = newFib2;
}
}
}
}