我有2个实现计算斐波纳契数的方法。为什么我需要在现实生活中实现迭代器,也不需要Fibonacci示例?因为我无法看到差异。是的,我知道接口,但我需要一个真正的例子,其中迭代器是有用的,而不仅仅是在内置集合类型中。如果我可以在Fibo
方法中做到,我为什么需要Fibonacci
迭代器方法?
using System;
using System.Collections.Generic;
class Fibonacci_C
{
static void Main()
{
foreach (int fib in Fibo(5))
{
Console.WriteLine(fib);
}
Console.ReadLine();
for (int i = 0; i < 5; i++)
{
Console.WriteLine(Fibonacci(i));
}
Console.ReadLine();
}
static public IEnumerable<int> Fibo(int length)
{
int prevFib = 0, curFib = 1, newFib = 0;
for (int i = 0; i < length; i++)
{
yield return prevFib;
newFib = prevFib + curFib;
prevFib = curFib;
curFib = newFib;
}
}
public static int Fibonacci(int length)
{
int a = 0;
int b = 1;
for (int i = 0; i < length; i++)
{
int temp = a;
a = b;
b = temp + b;
}
return a;
}
}
答案 0 :(得分:4)
在您的示例中,迭代器可以避免您反复计算已经计算过的斐波纳契数。你的第二种方法
public static int Fibonacci(int length)
{
int a = 0;
int b = 1;
for (int i = 0; i < length; i++)
{
int temp = a;
a = b;
b = temp + b;
}
return a;
}
在for
循环中调用时,必须在每次调用时计算所有斐波那契数字,最多为Fib(length
),即使它已在之前的调用中计算过它们。你的迭代器方法会让你失望,因为它只计算一次斐波那契数,并使用yield return
返回它。