Вывести только последнее значение - PullRequest
1 голос
/ 30 января 2012

У меня есть код, который читает из файла и выводит числа Фибоначчи.Например: 5 = 1, 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);

1 Ответ

2 голосов
/ 30 января 2012

Я предлагаю использовать подпрограмму, чтобы вынуть кусок кода из цикла

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";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...