Явная рекурсия - это зло! Вместо этого используйте библиотечную конструкцию, такую как карта, фильтр, сложить, отсканировать, воспроизвести, повторить и т. Д. Если это не делает код значительно более легким для чтения даже для тех, кто на самом деле работает с библиотеками, то это просто делает ваш код менее модульным, более подробным и более сложным для рассуждений.
Серьезно, за явно рекурсивные версии нужно проголосовать отрицательно за такую простую задачу, как эта. Теперь я думаю, что должен сказать что-то конструктивное, чтобы уравновесить мой карп.
Я предпочитаю использовать карту:
каждый n xs = карта (xs !!) [n-1, n-1 + n ..]
, а не понимание списка ja, так что читателю не нужно беспокоиться о том, кто я. Но в любом случае это O (n ^ 2), когда это может быть O (n), так что, возможно, это лучше:
каждый n = карта (!! (n-1)). повторение (исключение n)