题目描述:
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
输出格式:
输出一个整数
解题思路:
不用管是左脚还是右脚迈,只要走的步数是偶数即可。递归的思想。
代码(两种方法):
#include <iostream> using namespace std; int total=0; /*int ss(int num,int step) { if(num<0) return 0; if(num==0&&step%2==0) { total++; return 0; } ss(num-1,step+1); ss(num-2,step+1); }*/ int s(int num,int step) { if(num>39) return 0; if(num==39&&step%2==0) { total++; return 0; } s(num+2,step+1); s(num+1,step+1); } int main(int argc, char *argv[]) { //ss(39,0); s(0,0); cout<<total; return 0; }
答案:
51167078
以下内容转载于博客 http://blog.csdn.net/qsyzb/article/details/18991233
这种递归的效果如下图:
这个二叉树(本算法并不涉及二叉树知识,只是通过概念来理解)的每个叶子节点都是一种情况:
我们将每一个节点称为(x,y)
叶子节点分为两种情况:x为-1和x为0,x为-1的情况在现实中不可能发生,所以不予以考虑;
我们对每一种x为0的情况都进行判断,如果y的值为偶数,则计数器加1。