我试过这个不行......有人可以帮忙吗?想知道逻辑错误或语法。提前谢谢。
#*********************************************
puts "Fibbonocci sequence"
proc fibb {size} {
if { $size == 1 || $size ==0 } {
return $size
} else {
return [expr fibb [expr $size - 1] + fibb [expr $size - 2]]
}
}
puts "Enter the length of the series:"
set n [gets stdin]
puts "Fibbonocci sequence upto $n terms are:"
puts [fibb $n]
#**********************************************
答案 0 :(得分:4)
问题在于这一行:
return [expr fibb [expr $size - 1] + fibb [expr $size - 2]]
实际上,这有几个问题。首先是表达式没有被支撑:
return [expr { fibb [expr { $size - 1 }] + fibb [expr { $size - 2 }] }]
第二个问题是你必须在该外表达式中调用fibb
作为Tcl命令,因此需要更多[
括号]
:
return [expr { [fibb [expr { $size - 1 }]] + [fibb [expr { $size - 2 }]] }]
将其插入正确的位置,其余代码应该正常工作......
但是通过将fibb
转换为函数,我们可以比这更优雅。 Tcl中的函数实际上只是位于正确名称空间tcl::mathfunc
中的命令。
proc tcl::mathfunc::fibb {size} {
if { $size == 1 || $size ==0 } {
return $size
}
return [expr { fibb($size-1) + fibb($size-2) }]
}
然后你用它来调用它,比如说:
puts [expr { fibb($n) }]
唯一的区别在于我们已将命令(即过程)放在正确的命名空间中,以使其表现为表达式组件。我们仍然在表达式周围添加大括号(请总是这样做,直到您至少理解其重要性为止)并稍微简化代码。
此外,您仍然可以直接调用它:
puts [tcl::mathfunc::fibb $n]
这将以同样的方式运作。