递归—— 一只小蜜蜂

     有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
    其中,蜂房的结构如下所示。
Input 输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(02 1 2 3 6 Sample Output
1
3
 
  

一开始看见题或许你会有点懵,但是要找到其中的规律,在第n个格子里蜜蜂可以爬到第n+1,n+2格子里,f(n)=f(n-1)+f(n-2)。

因此,这是一个斐波那契数列

但用递归,时间是不允许的,会出现超时的错误。所以要用到数组。

#include 
int main()
{
    int i, j, n;
    long long d[51] = {1, 1, 2,};
    for (i = 3; i < 51; i++)
        d[i] = d[i-1] + d[i-2];
    scanf("%d", &n);
    while (n-- && scanf("%d%d", &i, &j) != EOF)
        printf("%lld\n", i > j ? 0 : d[j-i]);
    return 0;
}



 
 

你可能感兴趣的:(山理工OJ学习,递归)