#include <iostream>
#include <algorithm>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
long long int fun(long long int f1,long long int f2,int n)
{
int i;
if(n==1)return f1;
else if(n==2)return f2;
else {
for(i=0;i<n-2;i++)
{
if(i%2)f2=2*(f2+f1);
else f1=2*(f1+f2);
}
if(i%2)return f1;
else return f2;
}
}
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
printf("%lld\n",fun(3,8,N));//递推也需要注意数据溢出问题
}
return 0;
}
总结
1.二维思考递推公式,也就是f(n)=f(n-1,E)+f(n-1,O)+f(n-1,F)=2*f(n-1)+f(n-1,O)=2*f(n-1)+f(n-2,E)+f(n-2,F)=2*[f(n-1)+f(n-2)]