Czasami w wywiadach mogę użyć rekurencji, aby rozwiązać problem (na przykład dodanie 1
do nieskończonej liczby całkowitej precyzji) lub gdy problem wydaje się odpowiedni do użycia rekurencji. Czasami może to wynikać z częstego używania rekurencji do rozwiązywania problemów, więc bez większego zastanowienia rekursja służy do rozwiązania problemu.
Jakie są jednak uwagi, zanim zdecydujesz, że do rozwiązania problemu należy użyć rekurencji?
Kilka myśli, które miałem:
Jeśli użyjemy rekurencji na danych, które są zmniejszane o połowę za każdym razem, wydaje się, że nie ma problemu z użyciem rekurencji, ponieważ wszystkie dane, które mogą zmieścić się w 16 GB pamięci RAM, a nawet na dysku twardym o pojemności 8 TB, mogą być obsługiwane przez rekurencję na głębokości zaledwie 42 poziomów. (więc nie ma przepełnienia stosu (myślę, że w niektórych środowiskach stos może mieć głębokość 4000 poziomów, znacznie więcej niż 42, ale jednocześnie zależy to również od tego, ile zmiennych lokalnych, jak każdy stos wywołań, zajmuje więcej pamięci jeśli istnieje wiele zmiennych lokalnych i to rozmiar pamięci, a nie poziom, determinuje przepełnienie stosu)).
Jeśli obliczasz liczby Fibonacciego za pomocą czystej rekurencji, naprawdę musisz martwić się złożonością czasu, chyba że buforujesz wyniki pośrednie.
A co powiesz na dodanie 1
liczby całkowitej nieskończonej precyzji? Może jest to dyskusyjne, ponieważ czy będziesz pracować z liczbami o długości 3000 cyfr lub długości 4000 cyfr, tak dużej, że może to spowodować przepełnienie stosu? Nie myślałem o tym, ale może odpowiedź brzmi nie, nie powinniśmy używać rekurencji, ale po prostu używać zwykłej pętli, ponieważ co, jeśli w niektórych aplikacjach liczba naprawdę musi mieć długość 4000 cyfr, aby sprawdzić niektóre właściwości liczby, takie jak to, czy liczba jest liczbą pierwszą, czy nie.
Ostateczne pytanie brzmi: jakie są względy, zanim zdecydujesz się użyć rekurencji do rozwiązania problemu?
1
do nieskończonej liczby całkowitej precyzji? Można powiedzieć, że tak, redukują się one do mniejszych problemów, ale czysta rekurencja nie jest do tego odpowiednia