1. 程式人生 > >C語言:Fibonacci數列(非遞迴)

C語言:Fibonacci數列(非遞迴)

/*問題描述
Fibonacci數列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。
當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。
*/
#include<stdio.h>
#include<stdlib.h>

int N=10007;

void Print()//輸出簡易選單
{
	printf("*************Fibonacci***************\n");
	printf("Please enter an integer for analysis:\n");
}
int main(void)
{
	int F1,F2,n,tap=1,Fn;//tap標識是否繼續,tap=1繼續,tap=0退出。
	
	while(tap)
	{
		Print();
		scanf("%d",&n);
		F1=1;           //初始化
		F2=1;
		for(n=n-2;n>0;n=n-2)
		{	
			F1=(F1+F2)%N;
			F2=(F1+F2)%N;


		}
		Fn=F1;
		if(n==0)			//判斷輸出哪個位置上的數字
			Fn=F2;
		printf("%d\n",Fn);


		printf("enter 1 to continue,enter 0 to quit:\n");//判斷是否繼續
		scanf("%d",&tap);
	}
	printf("Thank You.\n");
	return 0;
}
這個是帶迴圈的,一次開啟可以分析多次。如果想要開啟一次分析一次,把while迴圈去掉就可以了。