Почему это хвостовая рекурсивная?

проверьте этот Scala-код:

def rec(n: Int) {
  if (n > 1) {
    val d = n / 2
    rec(d)
//    if (d > 1)  // abort loop
      rec(n/d)
  }
}

Этот код приведет к бесконечному циклу. Из-за хвостовой рекурсивной оптимизации я не получаю StackOverflowError.

Декомпилированный с помощью jad Я получил этот Java-код:

public void rec(int n)
{
    int d;
    for(; n > 1; n /= d)
    {
        int i = n;
        d = i / 2;
        rec(d);
    }
}

В последней строке цикла метод вызывает сам себя, поэтому я не понимаю позицию хвостового вызова . Кто-нибудь может это объяснить?

7
задан Stephen C 17 March 2011 в 09:39
поделиться