Вот простое решение, без рекурсии, без ничего, O (N):
#!/usr/bin/env python
DICE = 6 # how many sides our dice has
rolls = [1]
for i in range(1,800) :
rolls.append(sum(rolls[-min(i,DICE):]))
print rolls[:16] # print results for the first 16 (zero-based!!)
print rolls[610] # print result for 610 steps
Результат:
[1, 1, 2, 4, 8, 16, 32, 63, 125, 248, 492, 976, 1936, 3840, 7617, 15109]
14527490260516100855695859704819627818108010882741117227956927412305738742399171256642436462028811566617818991926058940988565927870172608545709804976244851391054850231415387973537361
Легко рассчитать количество рулонов для N = 50000 или 500000.