菲波那切数列用递归的方式效率是相当低下的,一般用迭代。但是为了学习,两种方法都写出来吧。
参考代码如下:
1 迭代方式
#include <stdio.h> #include <string.h> long fibonacci(int n) { if (n <= 2) { return 1; } long result; long pre_result; long pre_pre_result; pre_result = pre_pre_result = 1; while (n > 2) { result = pre_result + pre_pre_result; pre_pre_result = pre_result; pre_result = result; n--; } return result; } int main() { int N; scanf("%d", &N); int i; for (i = 1; i <= N; i++) { printf("%ld ", fibonacci(i)); } return 0; }
2 递归方式
#include <stdio.h> #include <string.h> long fibonacci(int n) { if (n <= 2) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } int main() { int N; scanf("%d", &N); int i; for (i = 1; i <= N; i++) { printf("%ld ", fibonacci(i)); } return 0; }
0.0分
34 人评分
#include<stdio.h> int main(){ int a=1,b=0,c=0,s,i=0; scanf("%d",&s); while(1){ printf("%d ",a); b=a+c; i++; if(i==s)return 0; printf("%d ",b); c=a+b; i++; if(i==s)return 0; printf("%d ",c); a=c+b; i++; if(i==s)return 0; } return 0; }
#include<stdio.h> int main() { int N,i,j,k,m; scanf("%d",&N); if(N==1) { printf("1 "); } if(N<41) { printf("1 "); for(i=0,j=1,k=1;k<N;k++) { printf("%d ",i+j); m=j; j=i+j; i=m; } } return 0; }
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int main() { int a=1,b=1,c; int num; scanf("%d",&num); if(num==1) printf("1"); else{ int i; printf("1 1 "); for(i=0;i<num-2;i++){ c=a+b; printf("%d ",c); a=b; b=c;} } }