将步数设为全局变量(出错)
#include<iostream>
using namespace std;
int ans=0;
int t=0;
void dfs(int step)
{
if(step==0&&t%2==0)
ans++;
if(step>0)
{
t++;
dfs(step-1);
dfs(step-2);
}
}
int main()
{
dfs(39);
cout<<ans;
return 0;
}
步数设为每次递归的局部变量
#include<iostream>
using namespace std;
int ans=0;
void dfs(int step,int t)
{
if(step==0&&t%2==0)
ans++;
if(step>0)
{
dfs(step-1,t+1);//走一阶,步数加一
dfs(step-2,t+1); //走两阶,步数加一
}
}
int main()
{
dfs(39,0);
cout<<ans;
return 0;
}
分析原因
但不知道为何只差一,如果这种原理的话应该差好多才对呀
我带入了45看结果也是差一(巧死算了),分析了一下,可能是整体的t都相当于加了1,除了第一个之外,于是阴差阳错后面的没变,就第一个偶数的时候误判(不一定对)