Wpis z mikrobloga

@g500s: nie jest to rekurencja ogonkowa, poniewaz nie mozesz zewaluowac wartosci w tym wywolaniu, tym samym na stosie wywolan funkcji to dzialanie bedzie odlozone na pozniej. Doprowadzi to do przepelnienia stosu jesli popsujesz warunek stopu.

W rekurencji ogonkowej do kolejnego wywolania funkcji przekazujesz caly stan tak ze nie musisz odkladac na stosie stanu poprzedniego.

Taka zmiana jak

return fac((i - 1) * i) powoduje ze przekazujesz cale dzialanie dalej i nie
@g500s: Chodzi o kolejność wykonania działań w linii 4. By móc zwrócić wartość muszą one zostać wykonane w kolejności:

# i-1 – zapamiętane pod adresem X
# fun(X) – zapamiętane pod Y
# i * Y – zwrócone

I teraz w drugim kroku masz skok do pierwszego. Przy odpowiednio dużej liczbie wywołań nastąpi:

# przepełnienie stosu wywołań, albo
# wyczerpanie pamięci służącej do alokowania wyników.