Skip to content

Commit e1154e2

Browse files
committed
Add DP program
1 parent 23af545 commit e1154e2

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

stairs.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# recursive staircase problem!
2+
3+
# recursive
4+
def ways(n, memo):
5+
if n < 0:
6+
return 0
7+
if n <= 1:
8+
return 1
9+
if memo[n] != -1:
10+
return memo[n]
11+
else:
12+
memo[n] = ways(n-1, memo) + ways(n-3, memo) + ways(n-5, memo)
13+
return memo[n]
14+
15+
16+
# iterative
17+
def waysI(n, x):
18+
if n == 0:
19+
return 1
20+
memo = [0] * (n+1)
21+
memo[0] = 1
22+
for i in range(1, n+1):
23+
total = 0
24+
for j in x:
25+
if i-j >= 0:
26+
total += memo[i-j]
27+
memo[i] = total
28+
return memo[n]
29+
30+
31+
if __name__ == "__main__":
32+
n = 41
33+
memo = [-1] * (n+1)
34+
print "Number of ways you can climb", n, "stairs:", ways(n, memo)
35+
print "ITERATIVE: Number of ways you can climb", n, "stairs:", waysI(n, {1,3,5})
36+
37+
from timeit import Timer
38+
39+
a = 512
40+
bs = Timer("ways(a, [-1]*(a+1))",
41+
"from __main__ import ways, a")
42+
print "time taken for ways: ", bs.timeit(number=100000), "sec"
43+
bs = Timer("waysI(a, {1,3,5})",
44+
"from __main__ import waysI, a")
45+
print "time taken for waysI: ", bs.timeit(number=100000), "sec"

0 commit comments

Comments
 (0)