Come promesso metto qui una mia versione
cominciamo con la versione iterativa:
_Bool ordinatai(char * s)
{
// versione iterativa
if(!s)
return 0;
while(*s <= *(s + 1))
s++;
return !(*(s + 1));
}
se si escludono le prime due righe, che sono per pura sicurezza, servono per il caso che venga passato un puntatore nullo, caso che non dovrebbe accadere se si usa un array di caratteri
dicevo, se si escludono le prime due righe, si vede che rimane molto poco nel corpo della funzione
il funzionamento?
semplicissimo,
essendo la stringa terminata da uno zero
e dovendo determinare se è crescente oppure no
ho unito i due concetti:
appena de-cresce
delle due l'una
o è uno zero, stringa finita, ovvero era tutta crescente
oppure non è uno zero, stringa non finita non era tutta crescente
basta negare l'ultimo carattere esaminato.......
non credo, qualunque cosa dica il teorema citato in precedenza, che una soluzione ricorsiva possa essere più breve di questa, usando un linguaggio come il C
non conosco altri, e non mi esprimo
PS
Nippolo è tra i miei ignorati
Non so cosa abbia scritto ne mi interessa saperlo
Ignorati certamente
Maledetto correttore