leetcode-climbStairs

来源:互联网 发布:如何用网络挣钱 编辑:程序博客网 时间:2024/06/05 20:25

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

如题:climbStair(n)= climbStair(n-1) + climbStair(n-2) ,这是什么?斐波那契数列啊,竟然没反应上来,随后就递归的写了斐波那契数列的实现,当然错啦,不是在算法,而是递归结构不对,才当n=44,就time limit exceeded!

翻了一下答案,应用迭代计算结果,并把每种结果存入数组,最后返回a[n],很好。。。

照例先上代码

<pre name="code" class="java">public int climbStair(int n){
//递归写法
<span style="font-family: Arial, Helvetica, sans-serif;">if(n==0||n<0){</span>
return 0;}if(n==1){return 1;}if(n==2){return 2;}return climbStair(n-1) + climbStair(n-2);}public int climbStairs(int n){<span style="white-space:pre"></span>//迭代,数组存储写法
int[] a = new int [n+1];a[0] = 1;a[1] = 1;for(int i=2;i<a.length;i++){a[i] = a[i-1] + a[i-2];}return a[n];} 
测试代码:

long t1=System.currentTimeMillis();System.out.println(cs.climbStair(44));long t2=System.currentTimeMillis();System.out.println(t2-t1);long t3=System.currentTimeMillis();System.out.println(cs.climbStairs(44));long t4=System.currentTimeMillis();System.out.println(t4-t3);
运行结果:

113490317015667  //递归写法所用的时间11349031700 //迭代写法所用的时间,几乎为零
两者差距很大,想想递归为甚么会如此的消耗时间,递归同时也消耗内存资源,这倒底是怎么回事?在哪里消耗?




0 0
原创粉丝点击