2012-01-29 59 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

相關問題