• tail call optimization icermeyen recursive bir fonksiyon:

    const count = (amount: number) => (amount > 0 ? [...count(amount - 1), amount] : []);
    ___________________________________________________
    tail call optimization iceren hali:

    const count = (amount: number, cur: number[] = []) =>
    cur.length >= amount ? cur : count(amount, [...cur, cur.length + 1]);
    ___________________________________________________
    ikinci fonksiyonda gordugunuz uzere, sonucu fonksiyonun ikinci argumaninda akümüle etmek burada "tail call optimization" olarak adlandiriliyor.
    javascript tco
  • daha önce resmen zırvaladığım bir entryi sildim, anlamadan konuşunca öyle oluyor. kimse de ne saçmalıyorsun dememiş. doğrusu şu ki;

    return statementtaki fonksiyon çağrısı bir recursion ise aynı fonksiyon tekrar çağrılmak yerine fonksiyon başına goto çekilir, bu fonksiyon çağrısındaki argümanlar da mevcut fonksiyonun içinde argümanlardan gelen değişkenlere atanır.

    bunun gerçekleşmesi için return statementında duru bir fonksiyon çağrısı olması gerekir.

    böylece recursive çağrıların zarafetinden faydanırken aynı zamanda stack overflowdan kaçınmış, düz while performansına ulaşmış oluyoruz.

    tartışmalı bir tekniktir, çağrı beklenen yerde çağrı oluşturmadığı için debug edilmeyi zorlaştırır. daha çok haskell, erlang, lisp gibi mutability sağlamadığı için döngüleri barındırmayan, recursionla işini görmeye çalışan fonksiyonel programlama dillerinde bulunur.
hesabın var mı? giriş yap