- 论坛徽章:
- 0
|
本帖最后由 3P主义 于 2012-03-11 00:27 编辑
不精确的概括,所谓尾递归,就是在函数里最后一条里调用自身;如果没有尾递归优化的话,在栈上要保存无数个函数的返回地址;在很多函数式语言里,有所谓的尾递归优化;在 Perl 里如何达到尾递归的效果?可以考虑借助 goto :
- #!/bin/env perl
- use strict;
- use warnings;
- print func(100);
- sub func {
- my ($n, $sum) = @_;
- $sum = 1 if (not defined $sum);
- if ($n <= 1) {
- return $sum;
- }
- else {
- $sum *= $n;
- @_ = ($n - 1, $sum);
- goto(&func);
- }
- }
- sub func2 {
- my ($n, $sum) = @_;
- $sum = 1 if (not defined $sum);
- if ($n <= 1) {
- return $sum;
- }
- else {
- $sum *= $n;
- return func2($n - 1, $sum);
- }
- }
复制代码 |
|