Ваш рекурсивный вызов всегда binomialb(n-1,something,power)
, поэтому изменяются только первый параметр n
и список.Ваш начальный звонок имеет power = 1
, так что это останется навсегда.Теперь ваше первое условие -
if (n == power || n < 0) {
return cons(1,null);
}
Если вы сначала наберете его с n > 1
, вызовы станут binomialb(n-k,...,1)
для k = 1, ..., n-1
.Наконец, вызов binomialb(1,lotsOfWastedWork,1)
, который с радостью вернет cons(1,null)
.Если вы сначала вызовете его с помощью n < 1
, n < 0
заставит его вернуть то же самое после не более одного рекурсивного вызова, n = 1
немедленно вернет cons(1,null)
.
Всякий раз, когда last
не является нулевым ввызов, вы должны использовать его.