ИМХО, это не хвостовая рекурсия.
Главное отличие в том, что в хвостовой рекурсии мы сначала вычисляем значение, а затем выполняем рекурсию, что означает, что нам не нужно хранить стек рекурсии.,В то время как в нехвостовой рекурсии мы сначала выполняем рекурсию, а затем вычисляем.Таким образом, мы должны сохранить рекурсивный стек, прежде чем сможем окончательно вычислить.
В вашем случае, прежде чем мы достигнем конца первой рекурсии, мы не можем выполнить шаг print
, из-за чего нам нужно сохранить значение x
в стеке.Если первый вызов рекурсии удален, это должна быть хвостовая рекурсия.
Обновление:
в соответствии с https://en.wikipedia.org/wiki/Tail_call,, к хвостовой рекурсии следует обращатьсявызов.Если мы говорим о хвостовой рекурсии в точке вызова функции, первый вызов в вашей программе должен быть не хвостовым рекурсивным, тогда как второй - это вызов хвостовой рекурсии.
Но в целомПрограмма, я думаю, что это не tail recursion
в целом.