【演算法】最大間隙
阿新 • • 發佈:2018-11-26
最大間隙
求解陣列元素在實軸上相鄰的2個數之間的最大差值
輸入
第一行輸入一個正整數N,表示資料的個數
接下來的一行中有N個實數,表示陣列中的N個元素,中間以空格分隔
輸出:
實軸上相鄰的兩元素之間差值的最大值
樣例輸入:
5
2.1 3.1 7.5 1.5 6.3
1-2 2-4 4-6 6-8
1.5 2.1 3.1 6.3 7.5
樣例輸出:
3.2
解題思路:
1、遞迴 將該函式看作 F(n)= F(n-1)+ F(n-2) ,F(1) = 1 ,F(2)= 1
2、非遞迴 取兩個變數x,y,每次運算分別記錄f(n-2)、f(n-1)的值
#include<stdio.h> #include<time.h> int Fibonacci1(int n){ int sum=0; if(n==2 || n==1) sum= 1; else sum+=Fibonacci1(n-1)+Fibonacci1(n-2); return sum; } int Fibonacci2(int n){ int sum,i,x,y; sum=0;x=1;y=1; if(n==1 || n==2) sum=1; else{ for(i=2;i<n;i++){ sum=x+y; x=y; y=sum; } } return sum; } int main(){ int m,i,n[10]; clock_t start, finish; double time; scanf("%d",&m); for(i=0;i<m;i++) scanf("%d",&n[i]); printf("遞迴:\n"); start=clock(); for(i=0;i<m;i++) printf("%d\n",Fibonacci1(n[i])); finish=clock(); time=(double)(finish-start)/CLOCKS_PER_SEC; printf("執行時間為:%f\n",time); printf("非遞迴:\n"); start=clock(); for(i=0;i<m;i++) printf("%d\n",Fibonacci2(n[i])); finish=clock(); time=(double)(finish-start)/CLOCKS_PER_SEC; printf("執行時間為:%f\n",time); return 0; }