已知某数列为:
F(0)=F(1)=1; F(2)=0;
F(n)=F(n-1)-3F(n-2)+2F(n-3) (n>2)
要求:使用递归法编写这个函数,然后输出F(0)~F(10),求其中的最大值和最小值、值为0的项的个数以及调用这个函数的总次数。
/*
已知某数列为:
F(0)=F(1)=1; F(2)=0;
F(n)=F(n-1)-3F(n-2)+2F(n-3) (n>2)
要求:使用递归法编写这个函数,然后输出F(0)~F(10),求其中的最大值和最小值、值为0的项的个数以及调用这个函数的总次数。
*/
#include <stdio.h>
int count = 0;
int F(int n)
{
count++;
if(n==0 || n==1)
return 1;
if(n==2)
return 0;
return F(n-1)-3*F(n-2)+2*F(n-3);
}
int main()
{
int i=0,max,min,d,num=0;
for(i=0;i<=10;i++)
{
d = F(i);
if(i==0)
max = min = d;
else
{
if (max < d)
max = d;
if(min > d)
min = d;
}
if(d == 0)
num++;
printf("F(%d)=%d\n",i,d);
}
printf("max=%d,min=%d\n",max,min):
printf("0的数量为%d\n",num);
printf("共调用函数%d次\n",count);
return 0;
}
#include <stdio.h>
int cnt;
int f(int n) {
cnt++;
if(n == 0 || n == 1)
return 1;
if(n == 2)
return 0;
if(n > 2)
return f(n - 1) - 3 * f(n - 2) + 2 * f(n - 3);
}
int main() {
int a[11],i,j,t,zero=0;
for(i=0;i<11;i++){
a[i] = f(i);
}
for(i=0;i<10;i++){
for(j=0;j<10-i;i++){
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<11;i++){
if(a[i] == 0){
zero ++;
}
}
printf("最大值:%d 最小值:%d 值为0的个数:%d 调用次数:%d",a[10],a[0],zero,cnt);
return 0;
}