![]() |
1
2
这是一个非常有趣的问题-我不确定是否有确切的答案。 goto的问题在于它以非结构化的方式使用——goto是一个“巨大的随机跳跃”,因此在一般情况下,在跳跃之后,您不知道从何而来,这会导致调试和可维护性方面的各种问题,并且——在更正式的意义上,证明代码的“正确性”。当然,有些语言(我已经使用了一段时间)是没有选择的,在这种情况下,您可以将结构强加于代码。归根结底,并不是说goto是坏的,而是goto被使用(和滥用)的方式是坏的,这使得goto成为可用的危险构造。 使用代码生成然后评估结果是聪明的:)然而,“聪明”并不总是一件好事,我怀疑将它用作解决方案的部分问题在于它实际上并没有按预期解决问题。从某种意义上说,这可能是“欺骗”——至少就你的教授而言——并不能使你的解决方案无效,但可能使它“不雅”。调试和维护问题也与代码有关。 一个递归的解决方案——特别是当我隐约记得(大约25年前)被教导通常可以将递归展开为循环时——可能是最优雅的。 绝对是个有趣的问题! |
![]() |
2
6
goto和代码生成都是针对imo这个问题的不完美的解决方案。 正确的 这里回答。 |
![]() |
3
2
如果没有看到您的代码,我倾向于站在教授一边。如果这是goto和动态代码之间的选择,我会倾向于前者。Goto不是 总是 一个糟糕的选择。 |
![]() |
4
2
你几乎可以解决所有的问题而不使用goto。特别是对于循环,您可以使用break和continue语句在代码标准仍然保持不变的情况下隐式使用goto。 n 嵌套循环听起来像是一个糟糕的计划,我建议您改为研究递归函数。每次你需要做一个n循环时,你都应该考虑递归。 |
![]() |
5
2
动态代码是不可编译时检查的,这意味着在运行时才会检测到任何错误。可能使他们更难找到。对于Ruby,这意味着无论您使用哪种语言,IDE或编辑器都不会发现语法错误。这是选择Goto的好处。 我想在这种情况下,我必须看到两者都做出决定。我没有看到代码,但我敢打赌,有一个好的解决方案不使用动态代码,也不使用goto的。goto并不总是坏的,但是如果你想使用它,你可能到目前为止还没有做出最佳的设计决策,可能想重新访问你的解决方案。 |
![]() |
6
1
在我大学的一次任务中,我曾经做过一些相对相似的事情。 我的解决方案是使用递归函数,将数组、数组大小和嵌套级别作为参数传递。然后函数用嵌套级别+1调用自己,直到嵌套级别等于数组的大小。没有goto,没有代码评估,只有干净的代码! 例子
希望有帮助! 我这辈子从来没有用过Goto,所以我很肯定总有办法避免它们。 |
![]() |
7
1
人们避免goto语句的主要原因是它们会使程序更难理解。 如果没有看到您的代码,我想比使用goto的等效程序更难理解… |
![]() |
8
1
goto解决方案——在模拟函数调用时,goto很方便。这里有一个非递归的解决方案,它使用堆栈和goto标签简单地模拟递归的解决方案,以返回到函数调用发生的位置。 请参阅递归过程(我将其作为单独的答案发布)进行比较。 选项严格打开 选项显式打开 模块模块1 作为堆栈的模糊X
标签:
ReturnLabel:
端模块 |
![]() |
9
0
Goto不干净。但是如果需要高性能,有时需要打破一些编码规则… 如果速度真的是一件重要的事情,例如,如果你想写一个库或代码,你有很大的存在,你可以考虑使用goto。你一定要注意一切都很顺利。 评论 :最后,执行CPU只执行简单的跳转。只是编程语言/编译器创建它们。小心使用,不要弄乱。 |
![]() |
10
0
Goto解决方案和动态代码生成思想都不好。这很容易用其他人提到的递归解决方案来解决。您只需递归地生成所有置换(标准递归解决方案),当生成完成(即在递归的叶中)时,只需跳过返回的不是混乱的置换。 |
![]() |
11
0
递归解决方案——这里有一个早期修剪的解决方案。我唯一的问题是关于枚举:他是否希望您创建一个枚举器,以便在每次成功调用时都生成列表中的下一项?通过创建这个程序的lambda版本,这可能是最容易实现的——在编写查询生成器时,我经常在lisp中这样做,在执行prolog解释器样式的查询时,查询生成器将生成问题的下一个答案。 选项严格打开 选项显式打开 模块模块1
端模块 |
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
![]() |
Pratik · 不使用Java DeepCopy迭代器 7 年前 |
![]() |
PanDe · 将两个列表合并为一个Dict、Tuple 7 年前 |
![]() |
bisarch · 迭代哈希集并在每次迭代中删除多个元素 7 年前 |