不能在循环块之外持续

时间:2013-09-27 13:51:47

标签: perl

我正在尝试解决问题

Rahul正在玩一个非常有趣的游戏。他有N个磁盘(每个磁盘的半径相等)。 每个磁盘都有一个与之关联的1到N的不同数字。磁盘一个放在另一个堆中。

Rahul希望从上到下按顺序对这堆磁盘进行排序。但他有一种非常特殊的方法。在一个步骤中,他只能从堆中选择一个磁盘,而他只能将它放在顶部。

Rahul希望以最少的可能步数对他的一堆磁盘进行排序。所以帮助Rahul这样做。因此,不必显示实际步骤只需回答最小数量的可能步骤来排序堆,以便Rahul可以检查他的工作是对还是错。

我写的代码是

sub get_order { 
    my (@input1)= @_; 
    my @input2 = @input1;

    my $count = 0;
    sub recursive {
        my $max = 0;
        last if ( $#input2 == -1 ) ;
        foreach ( 0 .. $#input2) {
            $max = $max > $input2[$_] ? $max : $input2[$_];
            print " maximum is $max \n";
        }
        if ( $max == $input2[$max-1] ) { 
            $abc = 0;
        } else {
            $count++;
            #push @input2, $max;
        }
        # deleting that particular array index from the array
        my %hash = map { 
            $_ => "1" 
        } @input2;
        delete $hash{$max};
        print %hash;
        print "\n";
        @input2 = keys %hash;
        print "***@input2 \n";
        &recursive();
    }
    &recursive();
    print "value is $count \n"; 
    return $count;

 }

get_order(3,1,2);

我收到错误无法在test.txt第8行的循环块之外“持续”。

2 个答案:

答案 0 :(得分:4)

forforeachwhileuntil或裸区之外,您无法使用lastnextredo

相反,你可以return来自函数,

return if ( $#input2 == -1 ) ;

答案 1 :(得分:3)

部分代码是

sub recursive {
    my $max = 0;
    last if ( $#input2 == -1 ) ;
    foreach ( 0 .. $#input2) {
这些行中的

last循环中不会出现for。因此错误信息。

last用于退出循环。如果您想退出sub,请使用return