Die Antwort ist wahrscheinlich blendend offensichtlich, aber für das Leben von mir kann ich es nicht sehen. Ich versuche herauszufinden, wie viele Iterationen es dauert, bis eine vom Benutzer gelieferte positive Ganzzahl auf 1 konvergiert (d.h. die rekursive Funktion ist f (x) = x/2, wenn x gerade, 3x + 1, wenn x ungerade). Die Antwort ist trivial, wenn sie mit roher Gewalt durchgeführt wird (d. H. Durch eine Reihe von if-Anweisungen). Ich strebe jedoch für einen rekursive Ansatz, und bin in einer Endlosschleife stecken:Collatz Rekursion in C Endlosschleife
#include <stdio.h>
int collatz(long number, int length)
{
while (number != 1)
{
length++;
printf("%ld\n", number);
if ((number % 2) == 0)
collatz(number/2,length);
else
collatz(3*number+1,length);
}
return length;
}
int main()
{
long number;
printf("Input a number\n");
scanf("%ld", &number);
int length=1;
printf("length is %d", collatz(number,length));
return 0;
}
Das Problem tritt auf, wenn die Anzahl = 1. Anstatt die Schleife zu beenden, fährt sie fort und so oszilliert sie unbegrenzt zwischen 1 und 2.
ich halte es für notwendig, darauf hinweisen, dass dies nicht eine gute Verwendung von Rekursion ist. Du hattest die richtige Idee mit der 'while' Schleife. Statt der rekursiven Aufrufe, aktualisieren Sie einfach die 'Nummer', d. H.' Nummer/= 2' und 'Nummer = 3 * Nummer + 1'. – user3386109