栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

单跳最多回溯n个楼梯n个楼梯

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单跳最多回溯n个楼梯n个楼梯

下面的代码是一个巨大的问题:您在步数范围内为 每种 可能性扣除步数。

n=n-ires=CSR(n,i,res)

探索完您可以执行1步跳转后的操作后,您需要 回溯 并尝试从 同一 起点(此实例的原始值

n
)进行2步跳转。将代码更改为:

res = CSR(n-i, i, res)

n
当您遍历循环时,这将保持值不变。

此外,您不能将将来的跳跃次数限制在您刚尝试的最大值。也更改第二个参数:

res = CSR(n-i, k, res)

那应该让你感动。也可以尝试这个可爱的调试博客以获取帮助。至少插入一个或两个跟踪语句,例如

print n, k, res

在您的日常工作中

警告

这不是您的全部麻烦。剩下的最大问题是

CSR
仅返回一种解决方案:您执行的每个步骤都将附加到 同一
列表中。您需要一种方法来将完整的解决方案收集为单独的列表。在
append
climbingStaircase
只执行一次,之后
CSR
完全结束。

您需要在找到一个完整的解决方案

n==0

调试帮助

这是程序的版本,其中固定了递归参数,并插入了调试跟踪。

indent = ""def climbingStaircase(n, k):    final_res = []    final_res.append(CSR(n, k, []))    return final_resdef CSR(n, k, res):    global indent    indent += "  "    print indent, n, k, res    if n == 0:        print "SOLUTION", res    else:        for i in range(1, k+1): if n-i >= 0:     CSR(n-i, k, res + [i])    indent = indent[:-2]print climbingStaircase(4, 2)

注意“缩进”的使用有助于可视化您的递归和回溯。这里的关键部分是

res
,我没有将其全局更新,而是将其保留为局部变量。我现在还 删除
了返回值,只是转储以找到找到的解决方案。您可以看到它是如何工作的:

   4 2 []     3 2 [1]       2 2 [1, 1]         1 2 [1, 1, 1]0 2 [1, 1, 1, 1]SOLUTION [1, 1, 1, 1]         0 2 [1, 1, 2]SOLUTION [1, 1, 2]       1 2 [1, 2]         0 2 [1, 2, 1]SOLUTION [1, 2, 1]     2 2 [2]       1 2 [2, 1]         0 2 [2, 1, 1]SOLUTION [2, 1, 1]       0 2 [2, 2]SOLUTION [2, 2][None]

有了这些东西,我希望您能追踪您的逻辑并弄清楚如何在您选择的级别上捕获解决方案的顺序。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616980.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号