C语言青蛙跳台阶问题(斐波那契数列)

问题介绍

C语言青蛙跳台阶问题(斐波那契数列)_第1张图片

        在n个台阶前,有一只青蛙,青蛙一次可以跳上1个或者两个台阶,问跳上n个台阶有几种跳法?


 问题分析

假设只有两级台阶

只有一种跳法:1->2

假设有三级台阶

有两种跳法:1->2->3 ; 1->3

假设有四级台阶

有三种跳法:1->2->3->4 ; 1->3->4 ; 1->2->4

假设有五级台阶

有三种跳法:1->2->3->4->5 ; 1->3->4->5 ; 1->2->4->5 ; 1->2->3->5 ; 1->3->5

....................

....................

        通过列举分析,我们可以看出,跳上台阶的方法数和斐波那契数列吻合(除一、二位是1外,其余位都是它的前两位数相加


代码实现

递归写法

#include 

int move(int num);

int main()
{
	int num = 0;
	printf("要跳多少个台阶?\n");
	scanf("%d", &num);
	printf("有%d种跳法\n", move(num));
	return 0;
}

int move(int num) 
{
	if (num < 3)//一、二默认为1
	{
		return 1;
	}
	else
	{
		return move(num - 1) + move(num - 2);//其余位为其前两位相加
	}
}

普通写法 

#include 

int f(int input);

int main()
{
	printf("要跳多少个台阶?");
	int input = 0;
	scanf("%d", &input);
	printf("有%d种跳法\n", f(input));
	return 0;
}

int f(int input)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (input > 2)
	{
		c = a + b;
		a = b;
		b = c;
		input--;
	}
	return c;
}

你可能感兴趣的:(c语言,算法)