【发布时间】:2015-01-02 11:19:49
【问题描述】:
对于给定的值 N,我试图输出相应的斐波那契数 F(N)。我的脚本似乎没有进入递归阶段。 fibonnaci($number) 没有调用子程序。它只是输出“斐波那契(输入任何数字)”。
这是我的代码:
#!/usr/bin/perl -w
use warnings;
use strict;
print "Please enter value of N: ";
my $number = <STDIN>;
chomp($number);
sub fibonacci
{
my $f;
if ( $number == 0 ) { # base case
$f = 0;
} elsif ( $number == 1 ) {
$f = 1;
} else { # recursive step
$f = fibonacci( $number - 1 ) + fibonacci( $number - 2 );
}
return $f;
}
print "\nf($number) = fibonacci($number)\n";
样本输出:
Please enter value of N: 4
f(4) = fibonacci(4)
user1:~>recursiveFib.pl
Please enter value of N: 5
f(5) = fibonacci(5)
user1:~>recursiveFib.pl
Please enter value of N: 10
f(10) = fibonacci(10)
user1:~>
不知道我哪里出错了。任何帮助将不胜感激。
【问题讨论】:
-
您没有正确处理子程序参数。你需要像
my ($number) = @_;这样的行作为fibonacci的第一行。 -
感谢您的回复。即使我添加了那行,我实际上仍然得到相同的结果。有任何想法吗? @ooga
-
这是您的
print行。从引号中取出函数调用。print "\n$number: ", fibonacci($number), "\n"; -
您可以使用 memoization 使其更快。 perldoc.perl.org/Memoize.html
标签: perl recursion scripting scripting-language