GOOGLE ADS

Dienstag, 19. April 2022

Schroders Große Zahlenfolge

Ich implementiere ein rekursives Programm, um die bestimmten Werte in der Schroder-Sequenz zu berechnen, und ich habe zwei Probleme:

  • Ich muss die Anzahl der Aufrufe im Programm berechnen;

  • Ab einer bestimmten Zahl generiert das Programm falsche Werte (ich denke, das liegt daran, dass die Zahl zu groß ist);

  • Hier ist der Code:

    let rec schroder n = 
    if n <= 0 then 1
    else if n = 1 then 2
    else 3 * schroder (n-1) + sum n 1
    and sum n k =
    if (k > n-2) then 0
    else schroder k * schroder (n-k-1) + sum n (k+1)

    Wenn ich versuche, Tupel ( 1. ) zurückzugeben, funktioniert die Funktion sumnicht mehr, weil sie versucht, zurückzugeben, intwenn sie type hat int * int; Bezüglich 2., wenn ich es tue schroder 15, kehrt es zurück:
    -357364258 wenn es zurückkehren sollte
    3937603038.


    Lösung des Problems

    Ich muss die Anzahl der Aufrufe im Programm berechnen;... die Funktion 'sum' funktioniert nicht mehr, weil sie versucht, 'int' zurückzugeben, wenn sie den Typ 'int * int' hat

    Stellen Sie sicher, dass Sie alle rekursiven Aufrufe auf aktualisiert haben shroder. Denken Sie daran, dass jetzt ein Paar und keine Zahl zurückgegeben wird, sodass Sie es beispielsweise nicht einfach hinzufügen können und das Paar zuerst entpacken müssen. Z.B,

    ...
    else
    let r,i = schroder (n-1) (i+1) in
    3 * r + sum n 1 and...

    und so weiter.

    Ab einer bestimmten Zahl generiert das Programm falsche Werte (ich denke, das liegt daran, dass die Zahl zu groß ist);

    Sie müssen Zahlen mit beliebiger Genauigkeit verwenden, z. B. zarith

    Keine Kommentare:

    Kommentar veröffentlichen

    Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

    Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...