这是一道pta的题目,对新人有一定难度(我就是)。

题目

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
函数接口定义:
int fib( int n );
void PrintFN( int m, int n );
其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。

题目代码

// #include <stdio.h>

int fib( int n );
void PrintFN( int m, int n );
	
int main()
{
    int m, n, t;

    scanf("%d %d %d", &m, &n, &t);
    printf("fib(%d) = %d\n", t, fib(t));
    PrintFN(m, n);

    return 0;
}

/* 你的代码将被嵌在这里 */

作业代码(后面有很多可以改进的地方)

int fib(int n){ 
	int i=0,a[10000];//n==2;
	for(;i<=n;i++){
		if(i==0||i==1){
		a[0]=a[1]=1; 
		}else a[i]=a[i-2]+a[i-1];
		if(i==n-1){
			return a[i];	 
	}

void PrintFN( int m, int n ){
	int i;
	int cnt=0;
	for(i=0;i<=10000;i++){
		if(fib(i)>10000){
			break;
		}	if (fib(i)==m){
			if(cnt==1){
			printf(" ") ;
			}
			else printf("%d",fib(i));
			cnt++;
		}else if(fib(i)>m&&fib(i)<=n){
			cnt++;
			if(cnt==1)printf("%d",fib(i));
			else printf(" %d",fib(i));
	
		}	
	}
	if(cnt==0){
		printf("No Fibonacci number");
	}

}

分步改正并讲解

int fib(int n);//返回第n项斐波那契数。

int fib(int n){//返回第n项斐波那契数。 
	int i=0,a[10000];//n==2;
	for(;i<=n;i++){
		if(i==0||i==1){
		a[0]=a[1]=1; 
		}else a[i]=a[i-2]+a[i-1];
		if(i==n-1){
			return a[i];
		}//牺牲空间而下面的牺牲时间(每次都从头算一遍)
	}
}/*int fib( int n ){
    if(n==1||n==2)
	return 1;

	return fib(n-2)+fib(n-1);
}*///可用其替换啊啊啊啊!

void PrintFN( int m, int n )//返回【m,n】之间的斐波那契数列

void PrintFN( int m, int n ){//输出所有斐波那契数列并一直到第m项,打印出来
	int i;
	int cnt=0;
	for(i=0;i<=10000;i++){
		if(fib(i)>10000){//因为会有内存溢出
			break;
		}	if (fib(i)==m){
//下面我写的代码很奇怪吧,因为如果不这么做,当m==1时就会 输出三个1;所以很无奈		
/*int first = 1;
    if(m==1){
        printf("1 1");
        first = 0;
        m = 2;
    }*///这样是一种更好的做法,直接输出1 1;
			if(cnt==1){
			printf(" ") ;
			}
			else printf("%d",fib(i));
			cnt++;
		}else if(fib(i)>m&&fib(i)<=n){
			cnt++;
			if(cnt==1)printf("%d",fib(i));
			else printf(" %d",fib(i));
	
		}	
	}
	if(cnt==0){
		printf("No Fibonacci number");
	}

}

感谢众多大神的帮助,这篇文章只是为了帮助更多的入门者更好的走下去。

文中有参考https://blog.csdn.net/qq_43328781/article/details/85157414