Muutettu viimeksi 13.11.2019. Sivu luotu 13.11.2019.
Perusmuoto:
int fib (int n) { if (n == 0 || n==1) return 1; else return fib(n-1) + fib(n-2); }Muokattu versio:
int fibrc (int n, int res1, int res2) { if (n == 0 || n==1 ) return res2; else return fibrc(n-1,res2, res1+res2); } int fib (int n) {return fibrc(n, 1, 1)}
a) Miksi ensinmainittu ei ole häntärekursiivinen?
b) Miksi jälkimmäinen on häntärekursiivinen?
c) Simuloi aktivaatiotietuepinon käytös
ensimmäisen version suorituksessa jollain sopivalla
(so. riittävän pienellä) argumentilla.
d) Simuloi aktivaatiotietuepinon käytös
toisen version suorituksessa jollain sopivalla
(so. riittävän pienellä) argumentilla, kun häntärekursriota
ei käytetä hyväksi.
e) Simuloi aktivaatiotietuepinon käytös
toisen version suorituksessa jollain sopivalla
(so. riittävän pienellä) argumentilla, kun häntärekursio
otetaan huomioon pinon käsittelyssä.
.
int x = 2; int fie(int y) { x = x + y; } { int x = 5; fie(x); write(x); } write(x);
z=1; for i=1 to 5+z by 1 do { write(i); z++; } write(z);What is printed by write?