码迷,mamicode.com
首页 > 编程语言 > 详细

c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

时间:2016-02-16 01:21:53      阅读:677      评论:0      收藏:0      [点我收藏+]

标签:c语言 剑指offer   青蛙跳台阶问题 斐波拉契数列应用

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

解:把n级台阶时的跳法记为f(n),当n>2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2);因此n级台阶时的跳法为f(n)=f(n-1)+f(n-2)。不难看出这实际是斐波拉契数列的变形应用,把斐波拉契数列的每一项向前移动了1位。

程序:

#include<stdio.h>


int fibonacci(int n)

{

int num1 = 1, num2 = 1, num3 = 0, i = 0;

if (n <= 1)

{

return num1;

}

for (i = 1; i < n; i++)

{

num3 = num1 + num2;

num1 = num2;

num2 = num3;

}

return num3;

}


int main()

{

int num = 0, ret = 0;

printf("请输入台阶数:");

scanf("%d", &num);

ret = fibonacci(num);

printf("总共有%d种跳法!\n",ret);

return 0;

}


结果:

请输入台阶数:3

总共有3种跳法!

请按任意键继续. . .

拓展: 一只青蛙一次可以跳上1级台阶,也可以跳上2级,......它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

解:我们可以用数学归纳法求得共有f(n)=2^(n-1)种跳法

程序:

#include<stdio.h>

#include<math.h>


int fibonacci(int n)

{

return pow(2,n-1);

}


int main()

{

int num = 0, ret = 0;

printf("请输入台阶数:");

scanf("%d", &num);

ret = fibonacci(num);

printf("总共有%d种跳法!\n",ret);

return 0;

}

结果:

请输入台阶数:3

总共有4种跳法!

请按任意键继续. . .


本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1742286

c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

标签:c语言 剑指offer   青蛙跳台阶问题 斐波拉契数列应用

原文地址:http://yaoyaolx.blog.51cto.com/10732111/1742286

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!