C# 如何得到c中的斐波那契#

C# 如何得到c中的斐波那契#,c#,C#,伙计们,我有一个关于斐波那契数列的问题。我如何得到斐波那契数列,该数列也将在用户输入时结束…例如,如果我把21放入,则输出必须是0 1 1 2 3 5 8 13 21 这是我的密码 static void Main(string[] args) { int input, first = 0, second = 1, third = 0; Console.Write("Enter a number : "); n = Convert

伙计们,我有一个关于斐波那契数列的问题。我如何得到斐波那契数列,该数列也将在用户输入时结束…例如,如果我把21放入,则输出必须是0 1 1 2 3 5 8 13 21

这是我的密码

    static void Main(string[] args)
    {

        int input, first = 0, second = 1, third = 0;
        Console.Write("Enter a number : ");
        n = Convert.ToInt32(Console.ReadLine());
        Console.Write("First {0} Fibonacci numbers {1} {2} ", input, first, second);

        for (int i = 3; i <= input; i++)
        {
            third = first + second;
            Console.Write("{0} ", third);
            first = second;
            second = third;
        }


    }
static void Main(字符串[]args)
{
int输入,第一个=0,第二个=1,第三个=0;
控制台。写入(“输入一个数字:”);
n=Convert.ToInt32(Console.ReadLine());
Write(“第一个{0}斐波那契数{1}{2}”,输入,第一,第二);

对于(inti=3;i,您的错误之一是在循环逻辑中

如果用户输入21,您希望fibonacci数最多为21。您不希望前21个fibonacci数

而不是

   for (int i = 3; i <= input; i++)
   {
      ////
   }
然后,每次你想转到下一个号码时:

while(seq[1] <= input) 
{
   Console.Write("{0}", seq[1]);    
   seq = new[] { seq[1], seq[0] + seq[1] };
}
while(seq[1]
迭代:

static int Fib(int x) {
    if (x == 0) return 0;

    int prev = 0;
    int next = 1;
    for (int i = 1; i < x; i++)
    {
        int sum = prev + next;
        prev = next;
        next = sum;
    }
    return next;
}
静态整数Fib(整数x){
如果(x==0)返回0;
int prev=0;
int next=1;
对于(int i=1;i
将斐波那契逻辑与应用程序逻辑分开

运行示例:

使用系统;
公开课考试
{
静态整数Fib(整数n){
返回值(n<2)?n:Fib(n-1)+Fib(n-2);
}
公共静态void Main()
{
控制台写入(Fib(10));
}
}
int first=0,second=1,third=0;
控制台。写入(“输入一个数字:”);
var n=Convert.ToInt32(Console.ReadLine());
Write(“第一个{0}斐波那契数{1}{2}”,n,第一,第二);
对于(int i=3;i使用:

publicstaticvoidmain()
{
double root5=Math.Sqrt(5);
双φ=(1+5)/2;
int输入;
控制台。写入(“输入一个数字:”);
输入=Convert.ToInt32(Console.ReadLine());
写入(“Fibonacci数到{0}:”,输入);
int n=0;
int-Fn;
做
{
Fn=(int)((数学功率(phi,n)-数学功率(-phi,-n))/(2*phi-1));
Console.Write(“{0}”,Fn);
++n;
}而(Fn


使用枚举和lambda在单个表达式中完成所有操作

    static void Main(string[] args)
    {
        double root5 = Math.Sqrt(5);
        double phi = (1 + root5) / 2;

        int input;
        Console.Write("Enter a number : ");
        input = Convert.ToInt32(Console.ReadLine());

        Console.Write("Fibonacci numbers to {0}: ", input);

        Enumerable.Range(0, 80).All(n => {
            int f = (int)((Math.Pow(phi, n) - Math.Pow(-phi, -n)) / (2 * phi - 1));
            Console.Write(" " + ((f<input)?f.ToString():""));
            return f < input;
        });
static void Main(字符串[]args)
{
double root5=Math.Sqrt(5);
双φ=(1+5)/2;
int输入;
控制台。写入(“输入一个数字:”);
输入=Convert.ToInt32(Console.ReadLine());
写入(“Fibonacci数到{0}:”,输入);
可枚举.范围(0,80).All(n=>{
intf=(int)((数学功率(phi,n)-数学功率(-phi,-n))/(2*phi-1));

Console.Write(“”+((f这个问题已经相当老了,但它可能对程序员面试有用,所以下面是:

正如其他一些答案所提到的,您有太多的变量。此外,您希望将业务逻辑与GUI分离,这将在面试中为您打分

请参阅以下代码:

static void Main(string[] args)
{
  Console.Write("Enter a maximum number for the Fibonacci sequence: ");
  Console.WriteLine(Fibonacci(Convert.ToInt32(Console.ReadLine())));
  Console.WriteLine("Press any key to quit.");
  Console.ReadKey();
}

static string Fibonacci(int max)
{
  int i = 0;
  StringBuilder result = new StringBuilder();

  for (int j = 1; j <= max; j += i)
  {
    result.Append(string.Format("{0} {1} ", i, j));
    i += j;
  }

  if (i <= max)
    result.Append(i);

  return result.ToString();
}
static void Main(字符串[]args)
{
Write(“输入斐波那契序列的最大值:”);
WriteLine(Fibonacci(Console.ReadLine());
控制台。WriteLine(“按任意键退出”);
Console.ReadKey();
}
静态字符串Fibonacci(int max)
{
int i=0;
StringBuilder结果=新建StringBuilder();

对于(int j=1;j您正在将用户输入输入到
n
,而不是
input
。如果您计划在循环中使用
input
,那么这真的是您想要做的吗?谢谢您的回答,先生。我将如何运行此代码?我在C语言中还是新手?很抱歉,我是noob。我记得在a中检查了一个与您相同的递归解决方案当然,它会表现得非常糟糕(我的意思是非常糟糕)除非它缓存结果。当然会;但性能在得到验证之前不是问题。告诉他缓存和记忆是本末倒置的。@jhovyn你需要先了解函数和调用函数,不幸的是,C#不是尾部调用优化的。因此,任何递归,即使你写得很好,也有有可能[本网站]出现异常。在C#中,选择优化自己的递归到迭代版本。感谢您的回复,先生。这对我帮助很大!热爱您(无可奈何地放纵)的工作。:-)与其使用
IEnumerable.All
,不如使用
IEnumerable.TakeWhile
。这样,当超过输入值时,它可以自动停止。
All
也会在一个输入计算为
false
时停止。区别在于
TakeWhile
返回一个可枚举项,但
All
返回一个
boolean
static int Fib(int n) {
    return (n < 2)? n : Fib(n - 1) + Fib(n - 2);
}
static int Fib(int x) {
    if (x == 0) return 0;

    int prev = 0;
    int next = 1;
    for (int i = 1; i < x; i++)
    {
        int sum = prev + next;
        prev = next;
        next = sum;
    }
    return next;
}
using System;

public class Test
{
    static int Fib(int n) {
        return (n < 2)? n : Fib(n - 1) + Fib(n - 2);
    }
    public static void Main()
    {
        Console.Write(Fib(10));
    }
}
int first = 0, second = 1, third = 0;
        Console.Write("Enter a number : ");
        var n = Convert.ToInt32(Console.ReadLine());
        Console.Write("First {0} Fibonacci numbers {1} {2} ", n, first, second);

        for (int i = 3; i <= n; i++)
        {
            third = first + second;
            Console.Write("{0} ", third);
            first = second;
            second = third;
        }
public static void Main()
{
    double root5 = Math.Sqrt(5);
    double phi = (1 + root5) / 2;

    int input;
    Console.Write("Enter a number : ");
    input = Convert.ToInt32(Console.ReadLine());

    Console.Write("Fibonacci numbers to {0}: ", input);

    int n=0;
    int  Fn;
    do
    {
        Fn = (int)((Math.Pow(phi,n) - Math.Pow(-phi, -n)) / (2 * phi - 1 ));
        Console.Write("{0} ", Fn);
        ++n;
    } while(Fn < input);
}
    static void Main(string[] args)
    {
        double root5 = Math.Sqrt(5);
        double phi = (1 + root5) / 2;

        int input;
        Console.Write("Enter a number : ");
        input = Convert.ToInt32(Console.ReadLine());

        Console.Write("Fibonacci numbers to {0}: ", input);

        Enumerable.Range(0, 80).All(n => {
            int f = (int)((Math.Pow(phi, n) - Math.Pow(-phi, -n)) / (2 * phi - 1));
            Console.Write(" " + ((f<input)?f.ToString():""));
            return f < input;
        });
static void Main(string[] args)
{
  Console.Write("Enter a maximum number for the Fibonacci sequence: ");
  Console.WriteLine(Fibonacci(Convert.ToInt32(Console.ReadLine())));
  Console.WriteLine("Press any key to quit.");
  Console.ReadKey();
}

static string Fibonacci(int max)
{
  int i = 0;
  StringBuilder result = new StringBuilder();

  for (int j = 1; j <= max; j += i)
  {
    result.Append(string.Format("{0} {1} ", i, j));
    i += j;
  }

  if (i <= max)
    result.Append(i);

  return result.ToString();
}