Fibonacci数列相关问题
题目:编程实现以下功能:从键盘输入一个正整数n,若n小于10或大于20,则提示用户重新输入,直到符合条件为止;将Fibonacci(菲波那契)数列的前n个合数(即除1以外的非素数)输出显示在屏幕上。例:输入33,提示用户重新输入。
输入11,显示结果为:
8 21 34 55
144 377 610 987
2584 4181 6765
我编写的代码:
#include<stdio.h>
int Fib(int n)
{
int f;
if(n==1)
f=1;
else if(n==2)
f=1;
else f=Fib(n-1)+Fib(n-2);
return(f);
}
int com_num(int n)
{
int k,tof;
for(k=2;k<Fib(n);k++)
{
if(Fib(n)%k==0)
tof=1;break;
}
return(tof);
}
void main()
{
int tr,tot,num,i;
num=0;
printf("Please input a number between ten and twenty.\n");
do
{
scanf("%d",&tr);
if(tr<10||tr>20)
printf("Error.Please input a number between ten and twenty.\n");
}
while(tr<10||tr>20);
tot=tr;
for(i=3;num<tot;i++)
{
if(com_num(i)==1)
{
printf("%d ",Fib(i));
num=num+1;
}
}
printf("\n");
}
运行11的结果是:
8 34 144 610 2584 46368 196418 832040 3524578 14930352
结果不对啊。我看了好几遍,都没看出来哪里出了问题,麻烦大家看看。谢谢。