我正在尝试解决问题
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行的循环块之外“持续”。
答案 0 :(得分:4)
在for
,foreach
,while
,until
或裸区之外,您无法使用last
,next
或redo
相反,你可以return
来自函数,
return if ( $#input2 == -1 ) ;
答案 1 :(得分:3)
部分代码是
sub recursive {
my $max = 0;
last if ( $#input2 == -1 ) ;
foreach ( 0 .. $#input2) {
这些行中的在last
循环中不会出现for
。因此错误信息。
last
用于退出循环。如果您想退出sub
,请使用return
。