数据结构(c语言完成) 已知数列的递归表达式 Fn=2F(n-1)+3F(n-2)+F(n-3) F0

2025-01-07 16:29:57
推荐回答(3个)
回答1:

C语言程序:

#include 

void main()
{
double f0 = 0, f1 = 0, f2 = 1, f3;
int i, n;

scanf("%d", &n);

if(n==1 || n==2)
{
printf("%d", 0);
return;
}
if(n==3)
{
printf("%d", 1);
return;
}

for(i=4; i<=n; i++)
{
f3 = 2 * f2 + 3 * f1 + f0;
f0 = f1;
f1 = f2;
f2 = f3;
}


printf("%.0lf\n", f3);
}


运行测试:

回答2:

#include "stdio.h"
#define M 82
int main(int argc,char *argv[]){
int s[4][M]={0,},i,j,k,N;
printf("Input N(int 0<=N<=1000)...\nN=");
if(scanf("%d",&N)!=1 || N<0 || N>1000){
printf("Input error, exit...\n");
return 0;
}
s[0][M-1]=s[1][M-1]=0,s[2][M-1]=1;
for(k=i=3;i<=N;i++,k++){
for(j=0;j s[k%=4][j]=(s[(k+3)%4][j]<<1)+3*s[(k+2)%4][j]+s[(k+1)%4][j];
for(j--;j>0;j--)
if(s[k][j]>999999)
s[k][j-1]+=s[k][j]/1000000,s[k][j]%=1000000;
}
N>2 ? k-- : k=N;
for(i=0;s[k][i]==0 && i printf("F(%d)=\n%d",N,s[k][i]);
for(i++;i printf("%06d",s[k][i]);
printf("\n");
return 0;
}

回答3:

#include
#include
double fn(double n)
{
int i;
double f0=0,f1=0,f2=1,f3;

if(0==n)
{
return 0;
}
else if(1==n)
{
return 0;
}
else if(2==n)
{
return 1;
}
else if(n>=3)
{
for(i=3;i<=n;i++)
{
f3=2*f2+3*f1+f0;
f0=f1;
f1=f2;
f2=f3;
}
return f3;
}
else
{
return -1;
}
}
int main()
{
double n,r;
char t[1024]={'\0'};

while(1)
{
printf("请输入整数n,输入exit退出循环:");
gets(t);
if(!strcmp(t,"exit"))
{
break;
}
n=atof(t);
if(-1!=(r=fn(n)))
{
printf("fn(%lf)=%lf。\n",n,r);
}
else
{
printf("不能计算fn(%lf)的值。\n",n);
}
}
system("PAUSE");
return EXIT_SUCCESS;
}