Ogólnie rozwiązania rekurencyjnego MOŻNA użyć wtedy, gdy problem możesz rozdzielić w ten sposób, że do jego rozwiązania użyjesz wyników dla tego samego problemu tylko dla mniejszych danych. Tak jak w przykładach, o których napisałeś:
Silnia - masz policzyć n! no to możesz to zrobić licząc (n-1)! i mnożąc razy n, (n-1)! z kolei to (n-1) razy i znowu (n-2)! czyli to samo dla mniejszego n. Warunkiem końca rekurencji będzie n = 1, bo 1! = 1.
Fibbonacci - Korzystasz z tego, że Fn = F(n-1) + F(n-2) rozbijając na mniejsze problemy no i wiesz, że F0 = 0 i F1 = 1
Pytanie kiedy NALEŻY użyć rozwiązania rekurencyjnego... Otóż, tak jak napisałeś, będzie ono zawsze wolniejsze od iteracji, ponieważ tworzenie kopii zmiennych i wywoływania zajmują trochę czasu. Odpowiedź jest taka, że rekurencje stosujemy wtedy, kiedy rozwiązanie za jej pomocą jest istotnie prostsze od rozwiązania klasycznego na pętlach. Przykłady, które podałeś czyli Silnia i Fibbonacci są antyprzykładami stosowania rekurencji tzn. istnieją na nie bardzo proste rozwiązania właśnie za pomocą pętli.
Pozdrawiam,