ohne jede Möglichkeit untersucht zu haben, die nicht die ersten 20+ Werten und die maximalen und minimalen Werte:
MY Erwartung ist
die ersten 12 Einträge in dem arr [] sind vorausberechneten zu helfen Verringern Sie die Tiefe einer Rekursion, jedoch ist der Dollarwert nicht der gleiche wie der berechnete Wert für diese ersten 12 Einträge.
für Münzwerte < = 49999, überprüfen, ob bereits berechneten Wert, wenn nicht, dann die Münze in die brechen/2/3/4 Werten und jeden dieser resultierenden Werte Rekursion.
Dieser Grenzwert (49999) könnte auf 100000 erweitert werden, da dies die verfügbare Größe des Arrays arr [] ist.
Die Voreinstellung und das Speichern im Array arr [] helfen, die Ausführungszeit und die Tiefe der Rekursion zu reduzieren.
Die Verwendung des Arrays ist so, dass alle zuvor berechneten Werte (im gebuchten Code, bis zu 49999) sofort von der max()
Funktion zurückgegeben werden können, ohne weitere Rekursion.
würde ich den Code leicht für eine bessere Dokumentation und Robustheit und eine schnellere Ausführung wie folgt ändern:
#include <stdio.h>
#include <stdint.h>
#define MAX_ARRAY_LEN (100000)
uint32_t arr[ MAX_ARRAY_LEN ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
uint32_t max(uint32_t n)
{
if(n < MAX_ARRAY_LEN)
{ // value of 'n' within the range of the learning array arr[]
if(!arr[n] && n)
{ // then learning array arr[] not yet set
return arr[n] = max(n/2) + max(n/3) + max(n/4);
}
else
{ // else learning array arr[] already set for 'this' value of 'n'
return arr[n];
}
}
else
{ // value of 'n' is greater than the learning array arr[]
return max(n/2) + max(n/4) + max(n/3);
}
} // end function: max
int main(void)
{
uint32_t n;
int status;
while((status = scanf("%u", &n)) == 1 && EOF != status)
{
if(1000000000 >= n)
{
printf("%u\n", max(n));
}
else
{
printf(" invalid value entered, must be in the range 0...1 000 000 000\n");
} // end if
} // end while
return 0;
} // end function: main
Wertebereich. –
@SouravGhosh Warum 49999 speziell? –
Ich würde vorschlagen, dass Sie 50000 nehmen und manuell herausfinden, was in Ihrem Array passieren wird. –