Numero di nepero

di il
2 risposte

Numero di nepero

Salve a tutti ho scritto una funzione che calcola il numero di nepero ma é troppo lenta per i numeri molto grandi (c´é un programma online che controlla e in un caso mi da limite di tempo superato). Gli input sono K e N tali che K = N = 33, e se dovessero superare il 33 devo restituire -1 e se N<K devo restituire 0. Non posso usare nessun tipo di ciclo(for, while, goto) e nemmeno le [] parentesi graffe. Qualche idea su come rendere piu veloce il mio codice? Grazie

int control2(int N,int K )
{
    if( K == 0 || K == N ) return 1;
    	
    if( N > 0 && K > 0 && N > K ) return control2( N - 1, K ) + control2( N - 1, K - 1 );  
}

int control(int N, int K){
	if(N<K)
		return 0;
	if(N>33 or K>33)
		return -1;
	return control2(N,K);
}

int newton(int N,int K){
	
    return control(N,K); 
}
siccome é un programma online a controllare ho dovuto scrivere la funzione newton in questo modo.

2 Risposte

  • Re: Numero di nepero

    Cerca una cosa che si chiama memoization.

    Ma hai capito perche' e' lento?

    Quale e' la complessita' computazionale dell'algoritmo?
  • Re: Numero di nepero

    Grazie mille della dritta! Ora credo di aver capito, dovrei implementarlo salvando i valori di volta in volta. Il problema é che nel compito che devo fare ho delle limitazioni. Il codice che mando online per essere verificato non puó avere #, main, e [](in modo da usare i puntatori invece dei classici array) e verrá verificato dopo in un altro codice (faccio un esempio perché non credo di essermi espresso al meglio: nome del mio file "source.cpp" -> file che andrá a controllare il mio contiene #include "source.cpp"). Quindi con il solo aiuto della funzione che dichiara essa stessa l´array (in questo modo: int* memo) dovrei fare quello che mi hai detto, il problema é che ci sto provando e non ci riesco. Riusciresti a darmi una mano per favore?
Devi accedere o registrarti per scrivere nel forum
2 risposte