Chinaunix首页 | 论坛 | 博客
  • 博客访问: 519886
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-21 13:40
个人简介

技术改变命运

文章分类

全部博文(184)

文章存档

2020年(16)

2017年(12)

2016年(156)

我的朋友

分类: C/C++

2016-07-06 16:00:37

题目描述;2016.8.19修改
    一个台阶总共有n阶,如果一次可以跳1阶,也可以跳2姐,求总共有多少种跳法.
思路:
把n阶台阶的跳数记作f(n),当 你n >2时,如果第一次直跳1级,则后面剩下的n-1阶的跳数为f(n-1),如果第一次跳2阶,后面剩下的n-2阶台阶的跳数为f(n-2).f(n) = f(n-1)+f(n-2).斐波那契数列!!!!
代码:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int f(int n)
  4. {
  5.     if (n == 0)
  6.         return 0;
  7.     if (n == 1)
  8.         return 1;
  9.     if (n == 2)
  10.         return 2;
  11.     return f(n-1)+f(n-2);
  12. }
  13. int main()
  14. {
  15.     int result = f(4);
  16.     printf("%d",result);
  17.     return 0;
  18. }
但是如果一个人可以一次跳1个,2个,或者3个时
公式如下:
f(n) =1;n=1
         2;n=2
        3;n=3
         f(n-1)+f(n-2)+f(n-3),n>3
非递归写法c代码:

点击(此处)折叠或打开

  1. #include
    using namespace std;
    long long  skip(unsigned int n)
    {
    int f[3] = {1,2};
    if (n == 0)
    return 0;
    if (n <= 2)
    return f[n-1];
    for (int i = 3;i <= n;i++)
    {
    f[2] = f[1]+f[0];
    f[0] = f[1];
    f[1] = f[3];
    }
    return f[3];
    }
    int main()
    {
    cout << skip(2)<< endl;
    return 0;
    }




阅读(632) | 评论(0) | 转发(0) |
0

上一篇:最大连续字数组的和

下一篇:投硬币问题

给主人留下些什么吧!~~