Imprimer une chaîne de fibonacci récursivement en C #

Cela peut-il être fait sans boucles while?

static void Main(ssortingng[] 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); } } 

Je ne peux même pas append Console.WriteLine dans le corps du Console.WriteLine de base car il est exécuté [nombre] nombre de fois; Vous ne savez pas comment faire cela sans boucles …

 static void Main(ssortingng[] 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); } } 

Je n’ai pas trouvé le moyen de le faire de la manière la plus proche, c’est de combiner les deux boucles + récursivité

  static void Main(ssortingng[] 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(ssortingng[] args) { ssortingng fibResult = ""; fibResult = FibCal(10); Console.WriteLine(fibResult); Console.ReadLine(); } public static ssortingng FibCal(int n) { ssortingng 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; } } } 

J'espère que cela t'aides

Utiliser la récursivité de cette manière est une très mauvaise idée. Cela causera des problèmes de mémoire très rapidement. Je sais que vous voulez éviter d’utiliser des boucles while / for, mais un tableau est vraiment la meilleure voie à suivre.

Utiliser 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(); } } 

C’est une façon de le faire en retournant une valeur dans la propriété principale.

public static void Main () {

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

// Prendre 2 pour faire correspondre la liste car les 2 premiers chiffres ne comptent pas dans la fonction.

  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); } } 

Je me rends compte que c’est peut-être un vieux fil, mais bon, je pense que cette question est bonne dans sa nature.

Utiliser une boucle while / ou récursive n’est pas la meilleure façon de faire car cela prend un temps O (2 ^ n). Une meilleure façon de faire est d’utiliser ce qui est déjà en mémoire, comme ci-dessous. Cela devrait prendre au plus O (n) temps.

À votre santé!

  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(ssortingng[] 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)); } } } }