Recentemente ho studiato la ricorsione; come scriverlo, analizzarlo, ecc. Ho pensato per un po 'che ricorrenza e ricorsione fossero la stessa cosa, ma alcuni problemi sui recenti compiti a casa e sui quiz mi fanno pensare che ci siano lievi differenze, che "recidiva" sia il modo di descrivere un programma o una funzione ricorsiva.Come si usa il teorema Master per descrivere la ricorsione?
Questo è stato tutto molto greco per me fino a poco tempo fa, quando ho capito che c'è qualcosa chiamato "teorema master" usato per scrivere la "ricorrenza" di problemi o programmi. Ho letto la pagina di Wikipedia, ma, come al solito, le cose sono formulate in modo tale che non capisco veramente di cosa stia parlando. Imparo molto meglio con gli esempi.
Così, alcune domande: Diciamo che le venga somministrato questo ripetersi:
r (n) = 2 * r (n-2) + r (n-1);
R (1) = r (2) = 1
È questo, infatti, nella forma del teorema? Se è così, a parole, cosa sta dicendo? Se stessimo cercando di scrivere un piccolo programma o un albero di ricorsione basato su questa ricorrenza, come sarebbe? Dovrei semplicemente provare a sostituire i numeri, vedere un pattern, quindi scrivere pseudocodici che potrebbero creare ricorsivamente quel pattern, o, poiché questo potrebbe essere nella forma del teorema master, c'è un approccio matematico più diretto?
Ora, diciamo che è stato chiesto di trovare la ricorrenza, T (n), per il numero di aggiunte eseguite dal programma creato dalla ricorrenza precedente. Posso vedere che il caso base sarebbe probabilmente T (1) = T (2) = 0, ma non sono sicuro di dove andare da lì.
Fondamentalmente, sto chiedendo come passare da una data ricorrenza al codice, e viceversa. Dal momento che questo sembra il teorema principale, mi chiedo se c'è un modo semplice e matematico per farlo.
EDIT: Ok, ho esaminato alcuni dei miei incarichi passati per trovare un altro esempio di dove mi viene chiesto, 'per trovare la ricorrenza', che è la parte di questa domanda che sto avendo il problema del post con.
ricorrenza che descrive nel miglior modo il numero di operazioni di addizione nel seguente frammento di programma (quando chiamato con l == 1 ed r == n)
int example(A, int l, int r) {
if (l == r)
return 2;
return (A[l] + example(A, l+1, r);
}
Ok, sembra abbastanza semplice. Non sono esattamente sicuro di quale sia la "recidiva", ma il mio professore usa spesso la parola, e diverse domande sulla prova pratica ci chiedono di guardare un programma, e poi trovarlo. Modificherò la mia domanda con un altro esempio. –