Funkcja zadana rekurencyjnie-znaleźć wartość dla n=8

marines27
Użytkownik
Użytkownik
Posty: 116
Rejestracja: 27 lis 2011, o 13:20
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy
Pomógł: 11 razy

Funkcja zadana rekurencyjnie-znaleźć wartość dla n=8

Post autor: marines27 »

Rozważmy następującą funkcje operującą na parametrze n,
będącym nieujemną liczbą naturalną:

Kod: Zaznacz cały

function ToJestTo(n)
{
if n < 1 then return(0) else
if n < 2 then return(1) else
return((n-1)*ToJestTo(n-2));
}
Jaką wartość zwróci instrukcja ToJestTo(8)? Odpowiedz uzasadnić.
Bardzo proszę o rozwiązanie problemu.
Ostatnio zmieniony 28 sty 2012, o 09:51 przez Afish, łącznie zmieniany 1 raz.
Powód: Stosuj tagi code.
adambak
Użytkownik
Użytkownik
Posty: 1272
Rejestracja: 8 sty 2011, o 18:18
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 295 razy
Pomógł: 115 razy

Funkcja zadana rekurencyjnie-znaleźć wartość dla n=8

Post autor: adambak »

odpowiedź: \(\displaystyle{ 0}\)
nawet nie trzeba tego liczyć.. widać że jak argumentem początkowym jest \(\displaystyle{ 8}\) to wywołania będą ciągle \(\displaystyle{ \text{return((n-1)*ToJestTo(n-2))}}\), a więc argument będzie malał o \(\displaystyle{ 2}\) aż wyniesie \(\displaystyle{ 0}\).. wtedy funkcja zwróci (na mocy pierwszego ifa) wartość \(\displaystyle{ 0}\), a że kolejne wywołania to były kolejne iloczyny to nie ważne co poprzednie zwróciły na końcu będzie razy zero a więc wynik to zero..

a rzeczywiście działanie będzie takie: (nazwę tą funkcję \(\displaystyle{ F}\), żeby się łatwiej pisało)
\(\displaystyle{ F(8)=(8-1)\cdot F(6)=(8-1)\cdot (6-1) \cdot F(4)=(8-1)\cdot (6-1) \cdot (4-1) \cdot F(2)=(8-1)\cdot (6-1) \cdot (4-1) \cdot (2-1) \cdot F(0)=(8-1)\cdot (6-1) \cdot (4-1) \cdot (2-1) \cdot 0=0}\)
ODPOWIEDZ