gpt4 book ai didi

c# - 重构斐波那契算法

转载 作者:可可西里 更新时间:2023-11-01 09:16:51 26 4
gpt4 key购买 nike

我已经很多年没有使用静态类型的语言了,我给自己设定了一个任务,那就是快速掌握 C#。我在这里使用我惯用的技巧来完成十五个练习 http://www.jobsnake.com/seek/articles/index.cgi?openarticle&8533作为我的第一个任务。

我刚刚完成了第二个 Fibonacci 任务,它没有花很长时间并且工作得很好,但在我看来它看起来很丑陋,我确信可以用更少的代码行来实现。

我通常喜欢通过与已经知道自己在做什么的人结对编程来学习,但这种选择今天对我不开放,所以我希望在这里发帖是下一个最好的事情。

那么对于所有 C# Jedi 来说,如果你要重构下面的代码,它会是什么样子?

using System;
using System.Collections;

namespace Exercises
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("Find all fibinacci numbers between:");
int from = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("And:");
int to = Convert.ToInt32(Console.ReadLine());
Fibonacci fibonacci = new Fibonacci();
fibonacci.PrintArrayList(fibonacci.Between(from, to));

}
}

class Fibonacci
{
public ArrayList Between(int from, int to)
{
int last = 1;
int penultimate = 0;
ArrayList results = new ArrayList();
results.Add(penultimate);
results.Add(last);

while(last<to)
{
int fib = last + penultimate;
penultimate = last;
last = fib;
if (fib>from && fib<to) results.Add(fib.ToString());
}
return results;
}

public void PrintArrayList(ArrayList arrayList)
{
Console.WriteLine("Your Fibonacci sequence:");
Console.Write(arrayList[0]);
for(int i = 1; i<arrayList.Count; i++)
{
Console.Write("," + arrayList[i]);
}
Console.WriteLine("");
}

}
}

问候,

克里斯

最佳答案

作为迭代器 block :

using System;
using System.Collections.Generic;
using System.Linq;

static class Program {
static IEnumerable<long> Fibonacci() {
long n = 0, m = 1;

yield return 0;
yield return 1;
while (true) {
long tmp = n + m;
n = m;
m = tmp;
yield return m;
}
}

static void Main() {
foreach (long i in Fibonacci().Take(10)) {
Console.WriteLine(i);
}
}
}

现在这是完全惰性的,使用 LINQ 的 Skip/Take 等可以让您轻松控制开始/结束。例如,对于您的“between”查询:

foreach (long i in Fibonacci().SkipWhile(x=>x < from).TakeWhile(x=>x <= to)) {...}

关于c# - 重构斐波那契算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com