Wird dieses Programm für jede ganze Zahl beendet?

394
prakhar londhe

In einem Teiltest für die GATE-Vorbereitung gab es eine Frage:

f(n): if n is even: f(n) = n/2 else f(n) = f(f(n-1)) 

Ich habe geantwortet "Es wird für alle Ganzzahlen beendet", da es auch für negative Ganzzahlen als Stack Overflow Error beendet wird .

Mein Freund war jedoch nicht der Meinung, dass es sich bei diesem Code nicht um implementierten Code und nur um einen Pseudocode handelt, dass bei negativen Zahlen eine unendliche Rekursion erfolgt.

Edit: Es gab ein kleines Problem im Code ..

Welche Antwort ist richtig und warum?

-2
Hinweis: Was ist Ihre Definition von sogar? Für mich ist "-2" auch Máté Juhász vor 5 Jahren 0
Nicht angegeben .. Aber ist es wichtig? prakhar londhe vor 5 Jahren 0
Wenn n gerade ist: f (n) = n / 2 bedeutet, dass das Programm für gerade n stoppt Máté Juhász vor 5 Jahren 0
Die einzigen zwei Optionen waren, wenn es für alle ganzen Zahlen oder nur für einige ganze Zahlen endet. prakhar londhe vor 5 Jahren 0
kann jemand bitte das downvote erklären .. prakhar londhe vor 5 Jahren 0
Dies liegt wahrscheinlich daran, dass Sie eine Off-Topic-Frage gestellt haben (die Programmierung ist hier Off-Topic) und es fehlt auch an Details. Máté Juhász vor 5 Jahren 1
Dies ist nicht für Super User geeignet. Ich denke, es muss weitergehen, weil es eine theoretische Frage ist. Daniel B vor 5 Jahren 2
Oh, Entschuldigung. Wie kann ich diese Frage dort hin migrieren? prakhar londhe vor 5 Jahren 0
[* Wie verschiebe ich meine eigene Frage an eine andere Stack Exchange-Site? *] (Https://meta.stackexchange.com/q/85017/355310) Markieren Sie die Frage für die Aufmerksamkeit des Moderators, aber stellen Sie zunächst sicher, dass sie für das Ziel geeignet ist Seite? ˅. Kamil Maciorowski vor 5 Jahren 0

1 Antwort auf die Frage

3
Jeff Zeitlin

Dieser Pseudo - Code wie ursprünglich angegeben wird für alle ganzen Zahlen beenden. Wenn eine ungerade Ganzzahl gegeben wird, wird eine von dieser subtrahiert und der geänderte Wert erneut angezeigt. selbst für ganze Zahlen wird sie durch 2 dividiert, aber nicht wiederkehren . Da die Funktion bei der ersten Eingabe einer ungeraden Zahl mit einer geraden Zahl als Parameter rekursiert, wird sie höchstens einmal aufgerufen und kehrt dann zurück.

(Hinweis: Der Code, der ursprünglich zum Zeitpunkt der Veröffentlichung angegeben wurde, war f (x) = f (x-1) für ungerade x.)

In der überarbeiteten Form wird es für alle nicht negativen Ganzzahlen beendet. Es wird jedoch nicht für alle negativen ganzen Zahlen beendet. insbesondere f(-1)ist dies eine nicht endende Anrufung.

Kannst du es bitte anhand eines Beispiels beschreiben? Ich kann nicht verstehen, wie es für negative ganze Zahlen endet. prakhar londhe vor 5 Jahren 0
Sorry die Frage war nicht richtig, ich habe sie geändert .. prakhar londhe vor 5 Jahren 0