|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Algoritmo sul cubo di un numero
Ciao a tutti!!!!
Non riesco a capire bene questo algoritmo ricorsivo. Il testo dice di assumere che esista una funzione quad() che calcoli il quadrato di un numero. Si deve quindi sviluppare una funzione cubo() che implementi un algoritmo ricorsivo che, usando solo somme e la funzione quad, restituisca il valore passato in input elevato al cubo. Il testo inoltre dice che bisogna usare lo sviluppo di (x+y)^3. Lo sviluppo di questa lo so cioè è x^3+3x^2+3x+1. Sfruttando questo devo implementare l'algoritmo ricorsivo. Il mio prof l'ha sviluppato in questo modo: Codice:
int cubo(int x){
if (x==0) return 0;
else return cubo(x-1)+quad(x-1)+quad(x-1)+quad(x-1)+x+x+x-2;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Il tuo professore ha utilizzato l'identità
x^3 = ((x-1)+1)^3 = (x-1)^3 + 3(x-1)^2 * 1 + 3(x-1) * 1^2 + 1^3 = (x-1)^3 + 3(x-1)^2 + 3(x-1) + 1 calcolando quindi in maniera ricorsiva (x-1)^3, finché l'argomento del cubo non diviene 0 (e quindi anche il suo cubo).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ok questo l'ho capito, però vorrei capire come sono i vari passi della ricorsione.
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
int Fattor( int i )
{
if (i)
i += Fattor( --i );
return i;
}
la si puo' vedere cosi passando per ex 4: andata: Fattor(4) ...Fattor(3) ......Fattor(2) .........Fattor(1) ritorno: .........i += 1 ......i += 2 ...i += 3 i += 4 that's all lo applichi al tuo problema e il gioco e' fatto
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
cubo(x) = cubo(x-1)+2quad(x-1)+3x-2; dove (calcolato ricorsivamente) cubo(x-1) = cubo(x-2)+2quad(x-2)+3(x-1)-2; dove cubo(x-2) = cubo(x-3)+2quad(x-3)+3(x-2)-2; dove ... dove cubo(2) = cubo(1)+2quad(1)+3*2-2; dove cubo(1) = cubo(0)+2quad(0)+3*0-2; dove cubo(0) = 0 (condizione di uscita) Nota che la condizione di uscita è arbitraria, e rappresenta un valore per cui il cubo è noto e che ti consente di terminare la ricorsione. Andava ugualmente bene definire la funzione in questa maniera: Codice:
int cubo(int x){
if (x==-3) return -27;
else return cubo(x-1)+quad(x-1)+quad(x-1)+quad(x-1)+x+x+x-2;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ok ora ho capito grazie
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:44.



















