![]() |
1
2
这是一个 Tribonacci sequence ,按顺序 A000073 ,跳过前两个零,因此从0开始,序列为1、1、2、4、7、13、24。。。等。 一个简单的递归函数看起来像这样:
如果真的实现为递归函数,你最好应用记忆化来确保它在线性时间内执行。 请注意,这种递归实现的空间复杂度为O()。一种更节省内存的方法是不将其实现为递归函数,而是迭代实现,其空间复杂度为O(1):
这背后的逻辑首先,在楼梯的故事中,让我们称之为 步 楼梯的一部分,以及 移动 你爬楼梯的动作(在英语中,“step”一词可以同时用于这两个词,但这会让人很困惑)。 在故事中,当你离顶部只有几步之遥(并且>2)时,你有三个下一步的选择:一步、两步或三步,以相同的幅度减少。如果对于这些选项中的每一个,你都知道有多少可能性可以继续达到顶峰,那么你可以把这三个数字加起来,得出当你离顶峰只有几步之遥时有多少可能性。 所以我们有这个递归关系,其中 表示当你距离顶部仅几步之遥时的可能性数量: = 1. + 2. + 3. 剩下的就是确定何时计数较小:
0
1.
第一个, 0 ,可能感觉不直观,但当你距离顶部0步时,你已经到达了顶部,不需要再移动了。然而,你 实现 目标,所以它算作1:显然有一种方法可以达到顶峰——什么都不做。 有了这些规范,递归函数自然会随之而来。 |
![]() |
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 8 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 8 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 1 年前 |
![]() |
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 1 年前 |
![]() |
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 1 年前 |