递归Tcl过程不返回任何内容

时间:2015-11-14 07:33:28

标签: recursion tcl

以下代码应该为给定的数字返回阶乘 使用递归过程将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中是否有任何关于递归调用的具体内容。

2 个答案:

答案 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
相关问题