【发布时间】:2018-04-10 01:57:03
【问题描述】:
我是 TCL 的初学者,在尝试构建 GCD 算法时遇到了一些问题,希望得到一些帮助:
我怎样才能像这样递归调用 proc 内的 proc
proc Stein_GCD { { u 0 } { v 0 } } {
if { $v == 0 } {
puts "$u\t\t$v\t\t$v"
}
if { [expr { $v % 2 } && { $u % 2 } ] == 0 } {
return [expr 2 * ${Stein_GCD 1 0} ]
}
}
set a [Stein_GCD 2 2 ]
puts $a
如您所见,我创建了 proc 来评估 GCD(代码没有任何意义,因为我正在尝试解决示例问题),并且我正在尝试再次递归调用 proc 以继续评估(请注意,我做了一个可以理解 Stein_GCD 1 0 调用的 if 语句,但是 tcl 8.6.6 在线 EDA 模拟器说:
您能告诉我如何有效地递归调用 proc,我的错误在哪里?
如果我在解释方面做得不好,我很乐意提供更多信息。
【问题讨论】:
-
除此之外,就风格而言,您最好为内部
if调用写if {!(($v % 2) && ($u % 2))} {;它既更有效也更清晰。而且我猜你需要做更多的工作来处理其他递归情况......