2010-11-24 3 views
0

ceci est la séquencerécursivité - Impression d'une séquence de nombres

1, 1, 2, 4, 7, 11, 16, 22, 29 ....

nécessité d'impression série comme ci-dessus en utilisant la fonction récursive

+6

Une question du test .. sans aucun doute. :) –

+0

Quelle est la condition d'arrêt. Vous avez toujours besoin d'une condition d'arrêt sinon vous aurez un débordement de pile (le vrai). –

+0

D'abord, élaborez le motif (ce n'est pas si compliqué). Ensuite, je suis sûr que vous pouvez le travailler à partir de là;) –

Répondre

2

Quelque chose comme ceci:

public void Numbers(int iteration, int number, int limit) 
{ 
    if(iteration < limit) { 
    Console.WriteLine(number); 
    Numbers(iteration + 1, number + iteration); 
    } 
} 

Numbers(0,1,5); 
0
public static void PrintNumbers(int current, int index) 
{ 
Console.Write(current + ", "); 

PrintNumbers(current + index, index + 1); 
} 

PrintNumbers(1, 0); 

Notez que ce recusion ne se termine pas, donc en cours d'exécution, il se traduira par une StackOverflowException.

6

je ne voudrais pas écrire même comme récursion:

static IEnumerable<int> Generate() { 
    int value = 1, inc = 0; 
    while(true) { 
     yield return value; 
     value += inc++; 
    } 
} 

récursivité est généralement mauvaise si elle est trop profonde ... Puis:

foreach(int x in Generate().Take(n)) 
    Console.WriteLine(x); 

Vous pouvez aussi simplement créer une boucle et imprimer en une seule méthode ... Mais où serait le plaisir?

(cette approche choisie délibérément pour montrer une technique utile sans directy être utilisable comme réponse aux devoirs)

+0

+1: Excellente utilisation de 'IEnumerable' et' yield return'. Les étudiants peuvent en apprendre plus sur ce code que sur la plupart des questions de test :) – David

+0

@David - surtout s'ils pensent à des choses comme "comment cela se passe-t-il pour imprimer quoi que ce soit? –

Questions connexes