思路分析:
递归可能会出现循环节。所以当出现循环时要结束递归。
代码:
#include<iostream>
using namespace std;
int f[1000];
int main()
{
int a,b,c,i,j,s;
f[1]=1;
f[2]=1;
while(cin>>a>>b>>c&&a&&b&&c)
{
s=0;
for(i=3;i<=c;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
for(j=2;j<i;j++)
{
if(f[j-1]==f[i-1]&&f[j]==f[i])
{
s=i-j;
break;
}
}
if(s>0)break;
}
if(s==0)cout<<f[c]<<endl;
else
{
c=(c-j)%s+j;
cout<<f[c]<<endl;
}
}
}