Find the number of ways to reach the top of the stairs given that there are N steps in total. A person can climb 1, 2 or 3 steps at a time.
/*
* NoWaysToClimbSteps.cpp
*
* Created on: May 10, 2012
* Author: Kiran Hegde
*/
#include <iostream>
using namespace std;
/**
* Since 1, 2 or 3 steps can be climbed at a time,
* The last step can be reached from the (last - 1), (last - 2) and
* (last - 3) steps. Each of these steps in turn can be reached in a
* similar manner. Recursive solution.
*/
int countWays(int noSteps, int *cache) {
if (noSteps < 0) {
return 0;
}
else if (noSteps == 0) {
return 1;
}
else if (cache[noSteps] >= 0) {
return cache[noSteps];
}
else {
cache[noSteps] = countWays(noSteps - 1, cache) +
countWays(noSteps - 2, cache) +
countWays(noSteps - 3, cache);
return cache[noSteps];
}
}
/**
*
*/
int countWays(int noSteps) {
int *cache = new int[noSteps+1];
for (int i=0; i<noSteps+1; i++) {
cache[i] = -1;
}
int result = countWays(noSteps, cache);
delete[] cache;
return result;
}
/**
* Test the code
*/
int main() {
// Assume that there are 25 steps in total
int noSteps = 25;
cout << "No of ways to climb " << noSteps << " steps: " <<
countWays(noSteps) << endl;
return 0;
}