- Prepare
- Interview Preparation Kit
- Recursion and Backtracking
- Recursion: Davis' Staircase

# Recursion: Davis' Staircase

# Recursion: Davis' Staircase

- Prepare
- Interview Preparation Kit
- Recursion and Backtracking
- Recursion: Davis' Staircase

Davis has a number of staircases in his house and he likes to climb each staircase , , or steps at a time. Being a very precocious child, he wonders how many ways there are to reach the top of the staircase.

Given the respective heights for each of the staircases in his house, find and print the number of ways he can climb each staircase, module on a new line.

**Example**

The staircase has steps. Davis can step on the following sequences of steps:

```
1 1 1 1 1
1 1 1 2
1 1 2 1
1 2 1 1
2 1 1 1
1 2 2
2 2 1
2 1 2
1 1 3
1 3 1
3 1 1
2 3
3 2
```

There are possible ways he can take these steps and

**Function Description**

Complete the *stepPerms* function using recursion in the editor below.

stepPerms has the following parameter(s):

*int n:*the number of stairs in the staircase

**Returns**

*int:*the number of ways Davis can climb the staircase, modulo 10000000007

**Input Format**

The first line contains a single integer, , the number of staircases in his house.

Each of the following lines contains a single integer, , the height of staircase .

**Constraints**

**Subtasks**

- for of the maximum score.

**Sample Input**

STDIN Function ----- -------- 3 s = 3 (number of staircases) 1 first staircase n = 1 3 second n = 3 7 third n = 7

**Sample Output**

```
1
4
44
```

**Explanation**

Let's calculate the number of ways of climbing the first two of the Davis' staircases:

- The first staircase only has step, so there is only one way for him to climb it (i.e., by jumping step). Thus, we print on a new line.
- The second staircase has steps and he can climb it in any of the four following ways:

Thus, we print on a new line.