n个台阶,每次都可以走一步,走两步,走三步,走到顶部一共有多少种可能

分析

第一个台阶  1
第二个台阶  11 2    //走两次1步或者走1次两步
第三个台阶  111 12 21 3 
第四个台阶  1111 112 121 211 22 13 31

思想:4阶台阶,第一次可以迈1步(还剩3台阶也就是f(3)可能)或者2步(还剩2台阶也就是f(2)可能)或者3步(还剩1台阶也就是f(1)可能)

f(n)=f(n-1)+f(n-2)+f(n-3)  第n个台阶的可能 = n-1台阶的可能+n-2台阶的可能+n-3台阶的可能

我这里采用了递归算法

//param x  台阶数目
int goadd(int x)
{
    if (x == 1){
        return 1;
    }
    else if (x == 2){
        return 2;
    }
    else if (x == 3){
        return 4;
    }
    else{
        return goadd(x - 1) + goadd(x-2)+goadd(x-3);
    }

}

void main()
{
    printf("%d", goadd(5));
    getchar();

}

转自:http://www.cnblogs.com/nfcm/p/6368058.html
时间: 2024-10-11 06:55:16

n个台阶,每次都可以走一步,走两步,走三步,走到顶部一共有多少种可能的相关文章

搞定面试算法系列 —— 分治算法三步走

主要思想 分治算法,即分而治之:把一个复杂问题分成两个或更多的相同或相似子问题,直到最后子问题可以简单地直接求解,最后将子问题的解合并为原问题的解. 归并排序就是一个典型的分治算法. 三步走 和把大象塞进冰箱一样,分治算法只要遵循三个步骤即可:分解 -> 解决 -> 合并. 分解:分解原问题为结构相同的子问题(即寻找子问题) 解决:当分解到容易求解的边界后,进行递归求解 合并:将子问题的解合并成原问题的解 这么一说似乎还是有点抽象?那我们通过经典的排序算法归并排序来体验一下分治算法的核心思想.

有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?

有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完? 相关问题: (1)有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?例如:总共3级台阶,可以先迈1级再迈2级,或者先迈2级再迈1级,或者迈3次1级总共3中方式. (2)有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法? (3)一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来.如果所有兔子都不死

多个 gradle 文件夹 \.gradle\wrapper\dists\ 设置gradle不是每次都下载

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 设置gradle不是每次都下载 \.gradle\wrapper\dists\ ======= 在你导入项目的时候,有个选项的: 你要是选了Use default gradle mapper就会下载一次,Use local gradle distribution就会用你制定的gradle了 ====== 设置gradle不是每次都下载 \.gradle\wrapper\dists\

LISTVIEW嵌套GRIDVIEW的一些处理(点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置)(对这篇文章的优化处理,不每次都new onItemClickListener)

前几天写了点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置,当时的处理是在ListView的适配器里的GetView方法里每次都new GridView的onItemClickListener,这样显然是不合理的, /**GridVIew的条目点击监听*/ private GvOnItemClickListener mGvOnItemClickListener;//成员 这是Fragment的入口: @Override public View onCreateView(Layou

TortoiseGit提交每次都需要输入用户名密码解决方法

作者:zhanhailiang 日期:2015-01-06 使用TortoiseGit Push时每次都需要输入用户名密码,如图: 在当前用户文件夹如D:\Users\wade.zhan下新建一个名为_netrc的文件. 编辑该文件: machine gitlab.tools.vipshop.com login wade.zhan password ******

VS每次都重复编译的问题

现象:没有改动代码,每次都重新编译 编译时提示" 解决Creating "...unsuccessfulbuild" because "AlwaysCreate" was specified." 原因1:时间问题,所创建的文件的时间比如是:2011-09-22 09:03:22,那么你的系统时间之前被你改动过当前时间是:2011-08-22 09:03:22.这下好了,vs每次编译的时候都会检查每个文件的最后修改日期,发现是上一个编译时间之后的,

转一下网上找来的tortoise git不用每次都输入邮箱和密码的方法。备查看

每次git clone 和push 都要输入用户名和密码.虽然安全,但在本机上每次都输有些麻烦,如何记住用户名和密码呢? 当你配置好git后,在C:\Documents and Settings\Administrator\ 目录下有一个  .gitconfig 的文件,里面会有你先前配好的name 和email,只需在下面加一行 [credential] helper = store 下次再输入用户名 和密码 时,git就会记住,从而在C:\Documents and Settings\Adm

https方式下 git push 每次都要输入密码的解决办法

转载自:http://git.oschina.net/oschina/git-osc/issues/2586   作者:Zoker https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credential.helper cache 如果想自己设置时间,可以这样做: git config credential.helper 'cache --timeout=3600'

linux cp覆盖每次都有提示

1.cp命令,目标已经存在,每次都提示是否覆盖,怎么办? 2.cp --help 可以看到选项-i的时候,才会提示,但是这里并没有-i,为什么每次都有提示? 3.原因是:这里执行的cp是一个别名,通过alias 命令可以看到 alias cp='cp -i' 4.怎么解决这个问题? a.使用原始的cp命令,\cp 1 2 b.通过alias命令,临时取消别名,alias cp='cp' c.要想重新登录或者重启有效,需要修改文件~/.bashrc,注意.bashrc是一个隐藏的文件,需要ll -