题目描述:
解题思路:
一开始其实是没想到的,这题是斐波那契的变形的。我们可以先不管左脚右脚,那么总数就是:f(39) = f(38) + f(37)。考虑左脚右脚,则再加一个变量记录一下就行了。
代码如下:
#include <iostream>
using namespace std;
int ans = 0;
void f(int n, int step){
if(n < 0) return;
if(n == 0 && step % 2 == 0){
ans++;
return;
}
f(n - 1, step + 1);
f(n - 2, step + 1);
}
int main()
{
// 请在此输入您的代码
f(39, 0);
cout<<ans<<endl;
return 0;
}
我还看到一个大佬的思路是用dp,但是有点不理解,不过先把代码贴出来吧
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int dp[40] = {0};
dp[1] = 1;
dp[2] = 2;
for(int i=3;i<40;i++){
dp[i] = dp[i-1] + dp[i-2];
}
printf("%d",(dp[39]+1)/2); //不太理解为什么要加1除2
}