解释这种动态编程攀岩正楼梯码(Explain this dynamic programming cl

2019-08-18 07:42发布

问题是

“你爬上楼梯的情况下,每一次你也可以制作1级或2级,楼梯有n个步骤。在你有多少不同的方式可以爬上楼梯?”

下面是这个问题的代码解决方案,但我无法理解它。 任何人都可以给我解释一下

int stairs(int n) {
  if (n == 0) return 0;
  int a = 1;
  int b = 1;
  for (int i = 1; i < n; i++) {
    int c = a;
    a = b;
    b += c;
  }
  return b;
 }

谢谢,

Answer 1:

嗯,首先你需要了解递推公式,以及我们如何来源于它迭代一个。

递归公式为:

f(n) = f(n-1) + f(n-2)
f(0) = f(1) = 1

f(n-1)为一个步骤, f(n-2)两个步骤,并且总数是办法用这些选项之一的数量-从而求和)。

如果你仔细看-这也是一个众所周知的系列- 斐波那契数 ,以及解决的方法就是计算每个号码BUTTOM向上而不是重新计算递归一遍又一遍,获得了更为有效的解决方案。



文章来源: Explain this dynamic programming climbing n-stair code