climb stair或fibonacci数

本文探讨了爬楼梯问题的不同解决方法,包括递归、动态规划等,并对比了几种实现方式。文章还讨论了子问题独立性的问题,并提到了斐波那契数列的高效算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天偶然看到之前的climb stair题,这种迭代方法居然是DP,有点吃惊,类似这种从小问题,到大一点问题递推过去的递推方程确实是DP,但是子问题之间的独立性确实有点怀疑,因为一个问题分成的几个子问题要独立,例如矩阵链,两个必定独立,装配汽车,只有一个问题,不需要考虑,等等

而且还看到了好多个版本的代码,实在是大快人心,居然有用3个变量的vector来做,虽然和三个变量没本质区别,但是说明自己想的确实还是少,或许以后有的问题可能可以尝试这个路子

http://blog.youkuaiyun.com/kenden23/article/details/17377869

  1. int climbStairsRecur(int n) {  
  2.         if (n == 1) return 1;  
  3.         if (n == 2) return 2;  
  4.         return climbStairsRecur(n-1) + climbStairsRecur(n-2);  
  5.     }
  1. int climbStairs(int n)  
  2.     {  
  3.         vector<int> res(n+1);  
  4.         res[0] = 1;  
  5.         res[1] = 1;  
  6.         for (int i = 2; i <= n; i++)  
  7.         {  
  8.             res[i] = res[i-1] + res[i-2];  
  9.         }  
  10.         return res[n];  
  11.     }  
  1. int climbStairs2(int n)  
  2.     {  
  3.         vector<int> res(3);  
  4.         res[0] = 1;  
  5.         res[1] = 1;  
  6.         for (int i = 2; i <= n; i++)  
  7.         {  
  8.             res[i%3] = res[(i-1)%3] + res[(i-2)%3];  
  9.         }  
  10.         return res[n%3];  
  11.     }  
  1. //2014-2-10 update  
  2.     int climbStairs(int n)  
  3.     {  
  4.         if (n < 4) return n;  
  5.         int a = 2, b = 3, c = 5;  
  6.         for (int i = 5; i <= n; i++)  
  7.         {  
  8.             a = c;  
  9.             c = b+c;  
  10.             b = a;  
  11.         }  
  12.         return c;  
  13.     }  
也可以申请n个元素的数组


另外之前还看到编程之美里fibonacci数居然还有O(logn) 的算法(我三关尽毁==!),以及O(1) 好吧带入公式如果不叫算法的话,像我这种更喜欢当解数学题的人估计一开始就想着人脑求出通项来,直接带入,如果有无理数的话用round(),j应该是可以保证结果正确性的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值