递归求解代码是最简单的,由于总数不超过20,因此也不会担心递归时函数调用栈不够的问题

转化为子问题为f(n-1)+f(n-2),分别表示第一天吃一块和第一天吃两块后还有多少吃法。

#include <iostream>
using namespace std;
int plans(int num){
    if(num==1) return 1;
    if(num==2) return 2;
    return plans(num-1)+plans(num-2);
}
int main() {
    int N;
    while (cin >>N) { // 注意 while 处理多个 case
        cout << plans(N) << endl;
       
    }
}
// 64 位输出请用 printf("%lld")