Given a number **N** which denotes the number of stairs, the task is to reach the **N ^{th}** stair by taking 1, 2 steps any number of times and taking a step of 3 exactly once.

**Examples:**

Input:N = 4

Output:2

Explanation:

Since a step of 3 has to be taken compulsorily and only once,

There are only two possible ways: (1, 3) or (3, 1)

Input:N = 5

Output:5

Explanation:

Since a step of 3 has to be taken compulsorily and only once,

There are only 5 possible ways:

(1, 1, 3), (1, 3, 1), (3, 1, 1), (2, 3), (3, 2)

**Approach:** This problem can be solved using Dynamic Programming. To Reach N^{th} stair the person should be on (N – 1)^{th}, (N – 2)^{th} or (N – 3)^{th}. So, To reach N^{th} stair from the base Reach (N – 1)^{th} stair which includes exact only one step of 3, Reach (N – 2)^{th} step with the steps which inclues exactly one step of 3 and Reach the (N – 3)^{th} step without taking any step of 3.

So, The Recurrence Relation for this problem will be –

includes_3[i] = includes_3[i-1] + includes_3[i-2] + not_includes[i-3]

whereas, the Recurrence relation when the 3 number of steps at a time is not allowed is

not_includes[i] = not_includes[i – 1] + not_includes[i – 2]

Below is the implementation of the above approach.

## C++

`// C++ implementation to find the number ` `// the number of ways to reach Nth stair ` `// by taking 1, 2 step at a time and ` `// 3 Steps at a time exactly once. ` ` ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `// Function to find the number ` `// the number of ways to reach Nth stair ` `int` `number_of_ways(` `int` `n) ` `{ ` ` ` `// Array including number ` ` ` `// of ways that includes 3 ` ` ` `int` `includes_3[n + 1] = {}; ` ` ` ` ` `// Array including number of ` ` ` `// ways that doesn't includes 3 ` ` ` `int` `not_includes_3[n + 1] = {}; ` ` ` ` ` `// Intially to reach 3 stairs by ` ` ` `// taking 3 steps can be ` ` ` `// reached by 1 way ` ` ` `includes_3[3] = 1; ` ` ` ` ` `not_includes_3[1] = 1; ` ` ` `not_includes_3[2] = 2; ` ` ` `not_includes_3[3] = 3; ` ` ` ` ` `// Loop to find the number ` ` ` `// the number of ways to reach Nth stair ` ` ` `for` `(` `int` `i = 4; i <= n; i++) { ` ` ` `includes_3[i] ` ` ` `= includes_3[i - 1] + includes_3[i - 2] + not_includes_3[i - 3]; ` ` ` `not_includes_3[i] ` ` ` `= not_includes_3[i - 1] + not_includes_3[i - 2]; ` ` ` `} ` ` ` `return` `includes_3[n]; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `n = 7; ` ` ` ` ` `cout << number_of_ways(n); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java implementation to find the number ` `// the number of ways to reach Nth stair ` `// by taking 1, 2 step at a time and ` `// 3 Steps at a time exactly once. ` `class` `GFG ` `{ ` ` ` `// Function to find the number ` `// the number of ways to reach Nth stair ` `static` `int` `number_of_ways(` `int` `n) ` `{ ` ` ` `// Array including number ` ` ` `// of ways that includes 3 ` ` ` `int` `[]includes_3 = ` `new` `int` `[n + ` `1` `]; ` ` ` ` ` `// Array including number of ` ` ` `// ways that doesn't includes 3 ` ` ` `int` `[]not_includes_3 = ` `new` `int` `[n + ` `1` `]; ` ` ` ` ` `// Intially to reach 3 stairs by ` ` ` `// taking 3 steps can be ` ` ` `// reached by 1 way ` ` ` `includes_3[` `3` `] = ` `1` `; ` ` ` ` ` `not_includes_3[` `1` `] = ` `1` `; ` ` ` `not_includes_3[` `2` `] = ` `2` `; ` ` ` `not_includes_3[` `3` `] = ` `3` `; ` ` ` ` ` `// Loop to find the number ` ` ` `// the number of ways to reach Nth stair ` ` ` `for` `(` `int` `i = ` `4` `; i <= n; i++) ` ` ` `{ ` ` ` `includes_3[i] ` ` ` `= includes_3[i - ` `1` `] + includes_3[i - ` `2` `] + ` ` ` `not_includes_3[i - ` `3` `]; ` ` ` `not_includes_3[i] ` ` ` `= not_includes_3[i - ` `1` `] + not_includes_3[i - ` `2` `]; ` ` ` `} ` ` ` `return` `includes_3[n]; ` `} ` ` ` `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `n = ` `7` `; ` ` ` ` ` `System.out.print(number_of_ways(n)); ` `} ` `} ` ` ` `// This code is contributed by Rajput-Ji ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 implementation to find the number ` `# the number of ways to reach Nth stair ` `# by taking 1, 2 step at a time and ` `# 3 Steps at a time exactly once. ` ` ` `# Function to find the number ` `# the number of ways to reach Nth stair ` `def` `number_of_ways(n): ` ` ` ` ` `# Array including number ` ` ` `# of ways that includes 3 ` ` ` `includes_3 ` `=` `[` `0` `]` `*` `(n ` `+` `1` `) ` ` ` ` ` `# Array including number of ` ` ` `# ways that doesn't includes 3 ` ` ` `not_includes_3 ` `=` `[` `0` `] ` `*` `(n ` `+` `1` `) ` ` ` ` ` `# Intially to reach 3 stairs by ` ` ` `# taking 3 steps can be ` ` ` `# reached by 1 way ` ` ` `includes_3[` `3` `] ` `=` `1` ` ` ` ` `not_includes_3[` `1` `] ` `=` `1` ` ` `not_includes_3[` `2` `] ` `=` `2` ` ` `not_includes_3[` `3` `] ` `=` `3` ` ` ` ` `# Loop to find the number ` ` ` `# the number of ways to reach Nth stair ` ` ` `for` `i ` `in` `range` `(` `4` `, n ` `+` `1` `): ` ` ` `includes_3[i] ` `=` `includes_3[i ` `-` `1` `] ` `+` `\ ` ` ` `includes_3[i ` `-` `2` `] ` `+` `\ ` ` ` `not_includes_3[i ` `-` `3` `] ` ` ` `not_includes_3[i] ` `=` `not_includes_3[i ` `-` `1` `] ` `+` `\ ` ` ` `not_includes_3[i ` `-` `2` `] ` ` ` `return` `includes_3[n] ` ` ` `# Driver Code ` `n ` `=` `7` ` ` `print` `(number_of_ways(n)) ` ` ` `# This code is contributed by mohit kumar 29 ` |

*chevron_right*

*filter_none*

## C#

`// C# implementation to find the number ` `// the number of ways to reach Nth stair ` `// by taking 1, 2 step at a time and ` `// 3 Steps at a time exactly once. ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to find the number ` `// the number of ways to reach Nth stair ` `static` `int` `number_of_ways(` `int` `n) ` `{ ` ` ` `// Array including number ` ` ` `// of ways that includes 3 ` ` ` `int` `[]includes_3 = ` `new` `int` `[n + 1]; ` ` ` ` ` `// Array including number of ` ` ` `// ways that doesn't includes 3 ` ` ` `int` `[]not_includes_3 = ` `new` `int` `[n + 1]; ` ` ` ` ` `// Intially to reach 3 stairs by ` ` ` `// taking 3 steps can be ` ` ` `// reached by 1 way ` ` ` `includes_3[3] = 1; ` ` ` ` ` `not_includes_3[1] = 1; ` ` ` `not_includes_3[2] = 2; ` ` ` `not_includes_3[3] = 3; ` ` ` ` ` `// Loop to find the number ` ` ` `// the number of ways to reach Nth stair ` ` ` `for` `(` `int` `i = 4; i <= n; i++) ` ` ` `{ ` ` ` `includes_3[i] ` ` ` `= includes_3[i - 1] + includes_3[i - 2] + ` ` ` `not_includes_3[i - 3]; ` ` ` `not_includes_3[i] ` ` ` `= not_includes_3[i - 1] + not_includes_3[i - 2]; ` ` ` `} ` ` ` `return` `includes_3[n]; ` `} ` ` ` `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` ` ` `int` `n = 7; ` ` ` ` ` `Console.Write(number_of_ways(n)); ` `} ` `} ` ` ` `// This code is contributed by PrinciRaj1992 ` |

*chevron_right*

*filter_none*

**Output:**

20

**Similar Article:** Count ways to reach Nth Stair using 1, 2 or 3 steps at a time

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Number of ways to reach Nth floor by taking at-most K leaps
- Count ways to reach the nth stair using step 1, 2 or 3
- Minimum cost to reach the top of the floor by climbing stairs
- Minimize steps to reach K from 0 by adding 1 or doubling at each step
- Count ways to reach end from start stone with at most K jumps at each step
- Find the number of ways to reach Kth step in stair case
- Check if it is possible to get given sum by taking one element from each row
- Count ways to reach a score using 1 and 2 with no consecutive 2s
- Count of ways to traverse a Matrix and return to origin in K steps
- Minimum steps to reach target by a Knight | Set 2
- Minimize the number of steps required to reach the end of the array
- Find minimum steps required to reach the end of a matrix | Set - 1
- Minimum steps to reach any of the boundary edges of a matrix | Set 1
- Find minimum steps required to reach the end of a matrix | Set 2
- Find minimum number of steps to reach the end of String
- Minimum steps to reach a destination
- Count ways to reach the n'th stair
- Count number of ways to reach a given score in a game
- Count number of ways to reach destination in a Maze
- Count number of ways to jump to reach end

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.