在C#中递归打印一串斐波那契

没有while循环可以做到吗?

static void Main(string[] args) { Console.WriteLine("Please enter a number"); int number = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(" #" + Fibonacci(number)); } public static int Fibonacci(int number) { if (number <= 1) { return 1; } else { return Fibonacci(number - 2) + Fibonacci(number - 1); } } 

我甚至无法在基本案例的主体中添加Console.WriteLine ,因为它被执行[次数]次数; 不知道怎么做没有循环…

 static void Main(string[] args) { Console.WriteLine("Please enter a number"); int number = Convert.ToInt32(Console.ReadLine()); Fibonacci(0, 1, 1, number); } public static void Fibonacci(int a, int b, int counter, int number) { Console.WriteLine(a); if (counter < number) Fibonacci(b, a+b, counter+1, number); } 
 public static int Fibonatchi(int position) { if(position == 0) { return 1; } if(position == 1) { return 1; } else { return Fibonatchi(position - 2) + Fibonatchi(position - 1); } } 

我没有找到一种方法来最接近它是否结合循环+递归

  static void Main(string[] args) { Console.WriteLine("Please enter a number"); int number = Convert.ToInt32(Console.ReadLine()); for(int counter=0;counter 
 namespace Algorithms { class Program { static void Main(string[] args) { string fibResult = ""; fibResult = FibCal(10); Console.WriteLine(fibResult); Console.ReadLine(); } public static string FibCal(int n) { string series = ""; int k, f1, f2 , f = 0; f1 = f2 = 1; if (n < 2) return n.ToString(); else for (k = 0; k < n; k++) { f = f1 + f2; f2 = f1; f1 = f; series += f.ToString() + ","; } return series; } } } 

希望这可以帮助

以这种方式使用递归是一个非常糟糕的主意。 它会很快导致内存问题。 我知道你想避免使用while / for循环,但数组真的是最好的方法。

使用LINQ

  public static void fibSeriesEx3() { List lst = new List { 0, 1 }; for (int i = 0; i <= 10; i++) { int num = lst.Skip(i).Sum(); lst.Add(num); foreach (int number in lst) Console.Write(number + " "); Console.WriteLine(); } } 

这是通过将值返回到main中来实现的。

public static void Main(){

  Console.WriteLine("Introduce the number"); int num = Convert.ToInt32(Console.ReadLine()); int num1 = 1, num2 = 1, counter = num-2; 

//取出2以匹配列表,因为前2个数字不计入函数。

  Console.WriteLine(Fibo(num1, num2, counter)); } public static int Fibo(int num1, int num2, int counter) { int temp = num1; if (counter <= 0) return num2; else return Fibo(num1 = num2, num2 += temp, counter-1); } 
 public static class Golden { public static IEnumerable Fibonacci() { var a = 0L; var b = 1L; var s = 0L; yield return a; while (a < long.MaxValue - b) { yield return b; s = a + b; a = b; b = s; } } public static IEnumerable FibonacciR() { IEnumerable Fibo(long a, long b) { yield return a; if (a < long.MaxValue - b) { foreach (var v in Fibo(b, a + b)) { yield return v; } } } return Fibo(0, 1); } } 

我意识到这可能是一个老线程,但是哦,我认为这个问题本质上是好的。

使用while循环/或递归方式不是最佳的做法,因为它需要O(2 ^ n)次。 更好的方法是使用内存中已有的内容,如下所示。 这应该最多花费O(n)时间。

干杯!

  static double fibDynamic(int n) { double[] array = new double[n]; array[0] = array[1] = 1; for(int i = 2; i < n; i++) { array[i] = array[i - 1] + array[i - 2]; } return array[n-1]; } 
 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static int Main(string[] args) { int n, i = 0, c; Console.WriteLine("Enter the number of terms:"); n = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Fibonacci series\n"); for (c = 1; c <= n; c++) { int result = FibonacciFunction(i); Console.Write(result + " " ); i++; } Console.WriteLine(); return 0; } public static int FibonacciFunction(int n) { if (n == 0) { return 0; } else if (n == 1) { return 1; } else { return (FibonacciFunction(n - 1) + FibonacciFunction(n - 2)); } } } }