Mam problem, nie wiem jak napisać algorytm niekorzystający z rekurencji (!) żeby obliczył wartość funkcji, która wygląda tak : f(m,n) n^3+2 dla m=0; f(m-1,1) dla m>0 i n=0; a dla innych f(m-1,f(m,n-1))
Pomysł miałem taki żeby korzystać z for/ while bo ma to być algorytm w pseudokodzie ktory tak na prawde wygląda jak jezyk C++. Wywnioskowałem że wartość podana będzie zależała tylko od liczby n, ale ta liczba n będzie sie zmieniała. Dodatkowo nie wiem czy polecenie jest dobre bo jakos nie widze możliwosci policzenia tego gdy damy ujemne m. Jakieś pomysły/sugestie/ podpowiedzi ?
Ktoś się nad Tobą znęca? ;)
To jest wariacja na temat funkcji Ackermanna -- funkcji rosnącej szybciej niż cokolwiek, co przeciętny użytkownik matematyki może sobie wyobrazić. Dla przykładu, (w przypadku klasycznego Ackermanna) już
f(4, 2) = 2^65536 - 3
czyli (cytując wiki) liczba cząsteczek w obserwowalnym wszechświecie podniesiona do dwusetnej potęgi. Ważna w teorii obliczalności i przy testowaniu optymalizacji kompilatorów.
Na temat iteracyjnej implementacji, wygoogluj sobie iterated ackermann implementation. Tylko pamiętaj, że Twoja funkcja nie jest dokładnie Ackermannem, różni się wzorem na końcu iteracji: f(0, n). Implementacja w pseudokodzie jest też o tyle łatwiejsza, że możesz po prostu napisać "mam stos, na który odkładam m-ki" i nie musisz się przejmować ograniczeniem wielkości zmiennych :)
I, jak dobrze zauważyłeś, nie jest obliczalna dla dowolnego argumentu mniejszego od 0.