解题思路:
自上而下地将大问题分解为规模更小但性质相同的小问题,对于第i个台阶,它可以从i-1跳上来,也可以从i-2跳上来,...,直到从第0个台阶跳上来。
例如dfs(4):
dfs(3)=dfs(2)+dfs(1)+dfs(0) dfs(2)=dfs(1)+dfs(0) dfs(1)=dfs(0)=1
因此我们可以采用递归的方法解决这个问题。
定义dfs(i)表示跳到第i个台阶的总跳法,边界就是当i=0时,调到第0个台阶的总跳法为1。
#include <iostream> using namespace std; int n; int dfs(int i) { if (i == 0) return 1; int res = 0; for (int j = 0; j < i; j++) res += dfs(j); return res; } int main() { cin >> n; cout << dfs(n) << endl; return 0; }