小编Tib*_*bor的帖子

阶乘递归达到零时出错

为什么Perl中的以下递归factorial失败,即使它在C++和Java中有效?

Java的:

public static long factorial(int n) {
  if (n == 0) {
    return 1;
  } else {
    return factorial(n-1) * n;
  }
}
Run Code Online (Sandbox Code Playgroud)

C++:

long factorial(int n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(n-1);
}
Run Code Online (Sandbox Code Playgroud)

但是这个在Perl(use Carp;)中失败了:

sub factorial {
    my $n = shift || croak "null value for argument";
    return 1 if $n == 0;  # base case
    return  $n * factorial($n-1);
}
Run Code Online (Sandbox Code Playgroud)

错误消息(第10行是调用函数的地方main(),第16行是第二个return语句):

 null value for …
Run Code Online (Sandbox Code Playgroud)

error-handling recursion perl function parameter-passing

1
推荐指数
1
解决办法
119
查看次数