P1-2017级算法第一次上机 A 水水的斐波那契数列
题目描述
相信大家都学过斐波那契数列,虽然很简单,但是斐波那契数列却是很重要的哦,那么让我们来复习一下斐波那契数列吧!
输入
多组数据输入
每行一个整数n (0<n<=30)
输出
对于每组数据,输出一行,为斐波那契数列第n 项的值
输入样例
1
2
3
4
输出样例
1
1
2
3
思路
用一个一维数组f(n)来表示斐波那契数列第n项的值。
则根据定义,后一项等于前两项之和,很容易得到:f(n) = f(n-1) + f(n-2)。
有两种做法,递归和循环。
虽然很多人都说递归好理解,但是作为一个递归是同学教的、基础完全没打扎实的人来说,能用循环就不会用递归。
直接上代码吧,没啥好说的。
1 //循环 2 #include<stdio.h> 3 int main() 4 { 5 int n; 6 int f[31]; 7 int i; 8 f[1] = 1;f[2] = 1; 9 for(i = 3;i <= 30;i++){ 10 f[i] = f[i-1] + f[i-2]; 11 } 12 while(scanf("%d",&n) != EOF){ 13 printf("%d\n",f[n]); 14 } 15 }
1 //递归 2 #include<stdio.h> 3 int main() 4 { 5 int n; 6 while(scanf("%d",&n) != EOF){ 7 printf("%d\n",feibonacci(n)); 8 } 9 } 10 11 int feibonacci(int n) 12 { 13 if(n == 1 || n == 2) 14 return 1; 15 else 16 return feibonacci(n-1) + feibonacci(n-2); 17 }