以下代码应该为给定的数字返回阶乘 使用递归过程将Tcl脚本作为输入参数。
if {$argc !=1} {
puts stderr "Error! ns called with wrong number of arguments! ($argc)"
exit 1
} else {
set f [lindex $argv 0]
}
proc Fact {x} {
if { $x==1 } {
return 1
}
return $x * Fact ($x-1)
}
set res [Fact $f]
puts "Factorial of $f is $res"
但是,它没有输出如下所示:
$ tclsh fact.tcl 5
Factorial of 5 is
我也试过了return [expr $x * Fact ($x-1)]
但是会导致解析错误。我不知道在Tcl中是否有任何关于递归调用的具体内容。
答案 0 :(得分:2)
进行计算时,您需要使用expr
命令,并且需要[]
来分隔命令,因此:
expr $x - 1
返回$ x - 1值而不修改x,
Fact [expr $x - 1]
计算$ x - 1
的阶乘expr $x * [Fact [expr $x - 1]]
计算factorial和x变量的乘法并返回所需的值
return [expr $x * [Fact [expr $x - 1]]]
这是在这种情况下您需要的最小括号集。
答案 1 :(得分:2)
如果您使用tcl::mathfunc
命名空间,事情会变得更加整洁:那么您的程序可以在expr
% proc ::tcl::mathfunc::fact {n} {
expr {$n == 1 ? 1 : $n*fact($n-1)}
}
% fact 3
invalid command name "fact"
% expr {fact(3)}
6
% expr {fact(6)}
720