本题要求实现求Fabonacci数列项的函数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
函数接口定义:
int fib( int n );
函数fib
应返回第n
项Fibonacci数。题目保证输入输出在长整型范围内。
裁判测试程序样例:
#include <stdio.h>
int fib( int n );
int main()
{
int n;scanf("%d", &n);
printf("%d\n", fib(n));return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
7
输出样例:
13
我们先来复习C语言的写法
1.
// int fib(int n)
// {
// int a , b , i , s ;
// for(s = a = b = 1 , i = 3 ; i < n + 1 ; a = b , b = s , i ++) s = a + b ;
// return s ;
// }
2.
// int fib(int n)
// {
// if (n==2||n==1)
// return 1;
// else
// return fib(n-1)+fib(n-2);
// }
3. int fib(int n)
{
int f[n+1];
f[0]=0;
f[1]=1;
f[2]=1;
int i;
for(i=2;i<=n;i++)
{
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
python完整代码
def fib(n):
if n <= 1:
return 1
else:
a, b = 1, 1
for i in range(2, n+1):
a, b = b, a + b #这里和之前C语言不一样 如a,b=b,a就是交换a和b的值
return b
def PrintFN(m, n):
s = []
i = 0
fib_num=0
while fib_num <= n:
fib_num = fib(i)
if n>=fib_num >= m:#这里不能简写成fib_num >= m因为fib_num = fib(i)可能超过n
s.append(fib_num)
i += 1
return s