2012-01-29 63 views
1

我有一些代码从文件中读取并输出斐波那契数。例如:5 = 1,2,3,5仅输出最后一个值

如何让我的代码只打印出最后一个值? 感谢

#!/usr/bin/perl 

use strict; 

my $fibFile = shift; 
if (!defined($fibFile)) { 
     die "[*] No file specified...\n"; 
} 

open (FILE, "<$fibFile"); 
my @numbers = <FILE>; 
foreach my $n (@numbers) { 
     my $a = 1; 
     my $b = 1; 
     for (0..($n - 1)) { 
       print "$a\n"; 
       ($a, $b) = ($b,($a + $b)); 
     } 
     print "\n"; 
} 
close (FILE); 
+0

这是功课吗?如果是这样,它应该被标记为 – Borodin 2012-01-29 23:42:05

+1

不,这不是作业,这是我发现的一个挑战。 – 2012-01-29 23:45:43

回答

2

我建议使用一个子程序采取的代码块圈外

sub fib { 
    my $n = shift(); 
    my @fib = (1, 1); 
    push @fib, $fib[-1] + $fib[-2] while @fib < $n; 
    @fib[0 .. $n-1]; 
} 

for my $n (1 .. 5) { 
    printf "%d = %s\n", $n, join ', ', fib $n; 
} 

你需要重新计算斐波纳契数列的文件中的每个值?如果没有,那么只需在子程序之外移动@fib数组声明,并且不需要重新计算数据。


对不起,我没有回答这个问题!要仅打印出序列中的最后一个值,请将代码中的循环限制更改为$n-2,并将循环外部的线条移动到print "$a\n";以替换线条print "\n";

+0

对不起,我没有回答你的问题!我已经更新了我的答案。 – Borodin 2012-01-29 23:59:39

+0

这很好,我很感激,谢谢。但是如果我给它“为我的$ n(1..12)”,那么将要打印的最高值是144.我怎样才能让它打印出最高值? – 2012-01-30 00:01:47

+0

非常感谢,它的功能很神奇。 – 2012-01-30 00:05:23

相关问题