递推——斐波那契数列应用 | HDU - 2044 一只小蜜蜂... HDU 2041--超级楼梯

首先题目:

一只小蜜蜂...

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 93009    Accepted Submission(s): 33088

 

Problem Description

有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。

Input

输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。

Output

对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。

Sample Input

2 1 2 3 6

Sample Output

1 3


超级楼梯

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 73863    Accepted Submission(s): 37772


 

Problem Description

有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

Input

输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。

Output

对于每个测试实例,请输出不同走法的数量

Sample Input

2 2 3

Sample Output

1 2


分析

首先,对于蜜蜂问题,当要到第b个时,从第b-1和第b-2个都可一步走到第n个。

所以总体,到第b蜂房个的路程数,就可以转化为 第b-1个蜂房道路+第b-2个的道路数。

 

而超级楼梯问题也可按照这样的思路求解。

第n阶楼梯可以由第n-1阶和第n-2阶一步上去。

 

故这类问题都可以表示为:  f(n)=f(n-2)+f(n-1),n>3 

即可递推求解。同时由 求解的 f(n)=f(n-2)+f(n-1),n>3 叫做  斐波那契数列


斐波那契数列代码表示

 

递归方法:

#include<stdio.h>
#include<stdlib.h>
 
int Fibonacci_sequence(int n)
{
	if (n == 1 || n == 2) // 递归结束的条件,求前两项
		return 1;
	else
	{
		return Fibonacci_sequence(n - 1) + Fibonacci_sequence(n - 2); // 如果是求其它项,先要求出它前面两项,然后做和。
	}
}
 
int main()
{
	int i = 0;
	int n = 8;
	printf("Please enter a number:");
	scanf("%d", &n);
	i=Fibonacci_sequence(n);
	printf("The number is %d\n", i);
	system("pause");
	return 0;
}

 

 

 

非递归,普通遍历

#include<stdio.h>
#include<stdlib.h>
 
 void Fei(int n) // 非递归
 {
	
	int sum = 1;
	int sum1 = 1;
	int i = 0;
	int tem = 0;
	if (n < 1)
	{
		printf("输入数字有误\n");
	}
	else if (1 == n)
	{
		printf("第n个斐波那契数是:%d\n", sum);
	}
	else if(2 == n)
	{
		printf("第n个斐波那契数是:%d\n", sum);
	}
	else
	{
		for (i = 0; i < n - 2; i++) //  第三项等于前两相加
		{
			tem = sum;   //  tem 保存原来的sum
			sum += sum1; //  sum= 前两项相加
			sum1 = tem;  //  sum1 =原来的sum    始终保证第三项等于前两项相加
		}
		printf("第n个斐波那契数是:%d\n", sum);
	}
	
}
int main()
{
	int n = 0;
	printf("Please enter a number :");
	scanf("%d",&n);
	Fei(n);
	system("pause");
	return 0;
}

也可以进行打表,之后直接提取

全部评论

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务