---
# System prepended metadata

title: 天天爬樓梯

---

# 天天爬樓梯
https://neoj.sprout.tw/problem/443/
### 題目敘述
![](https://i.imgur.com/AycLIjV.png)
天天最近沉迷於爬樓梯，他發現一個同樣的樓梯可以有許多不同的爬法， 例如3階的樓梯可以一階一階爬完(111)、先跳兩階再爬完最後一階(21)、 先爬一階再跳兩階(12)、一次跳三階(3)四種爬法。

因為太喜歡爬樓梯了，現在天天每看到一段樓梯都會忍不住算一算總共有幾種爬法， 但隨著階梯數越來越多，他算完後常常就沒有時間去爬他最愛的樓梯了。

已知天天腳很短，一次最多只能跳3階樓梯，你能編寫一個函數讓天天每見到一個樓梯 馬上就能算出總共有幾種爬法，讓他有時間去爬他最愛的樓梯嗎？

為了防止造成你太大的負擔，天天已經寫好一半的code了， 你只需要完成function部分即可。

### 天天的code：
```cpp
#include <iostream>

int ladder(int n);

/* 你的code會放在這邊 */

int main()
{
  int n;
  std::cin >> n;
  std::cout << ladder(n) << '\n';
  return 0;
}
```
### 輸入說明
輸入一個正整數n代表樓梯階數，保證0<n<=30。

### 輸出說明
請輸出這個樓梯有幾種爬法，輸出後請換行。

### 範例輸入
```
3
```
### 範例輸出
```
4
```
# Code
```cpp
int ladder(int n)
{
  if (n == 0)
    return 0;
  if (n == 1)
    return 1;
  if (n == 2)
    return 2;
  if (n == 3)
    return 4;
  return ladder(n - 3) + ladder(n - 2) + ladder(n - 1);

}
```