问题:输入两个正整数m和n(1mn100000),输出m~n之间所有的斐波那契数。斐波那契数列(第1项起):1 1 2 3 5 8 13 21……要求定义并调用函数fib(n),它的功能是返回第n项斐波那契数。例如fib(7)的返回值是13,。试编写相应程序。
解答:
#include <stdio.h>
int fib(int n); /*函数声明*/
int main(void)
{
int m,n,i;
scanf("%d %d",&m,&n);
for(i=1;i<=25;i++){ /*因为1<=m<n<=100000,斐波那契数列在此范围内最大项为第 25项75025,所以i<=25*/
if(fib(i)>=m&&fib(i)<=n){ /*判断斐波那契数是否在范围内*/
printf("%d ",fib(i));
}
} /*循环输出在(m,n)范围内的斐波那契数 */
return 0;
}
int fib(int n) /*定义函数*/
{
if(n<=2){
return 1;
}else{
return fib(n-1)+fib(n-2); /*斐波那契数列的定义,递归方法*/
}
}
输出多个数时,如果想多行输出,也可对主函数进行如下修改(以每五个数换行为例):
int main(void)
{
int m,n,i,count=0; /*使用count计数,初始值为0*/
scanf("%d %d",&m,&n);
for(i=1;i<=25;i++){ /*因为1<=m<n<=100000,斐波那契数列在此范围内最大项为第 25项75025,所以i<=25*/
if(fib(i)>=m&&fib(i)<=n){ /*判断斐波那契数是否在范围内*/
printf("%d ",fib(i));
count++;
if(count%5==0){ /*count为5的倍数时,换行*/
printf("\n");
}
}
} /*循环输出在(m,n)范围内的斐波那契数 */
return 0;
}