sunzhiguolu 发表于 2017-06-28 22:05

本帖最后由 sunzhiguolu 于 2017-06-28 22:08 编辑

回复 20# 523066680
大神 能否用 7 楼的代码作为示例进行讲解,我想通过实际案例 加上大神通俗易懂的描述 对代码的理解会更清楚些。谢谢。
不急,您将语言好好组织一下。
另外,前面我说了。如果我能够从中受益 (学到知识, 积分不是问题 可以商量)。辛苦了。

523066680 发表于 2017-06-28 22:12

回复 21# sunzhiguolu

我就是用他的代码改了函数名、拆了两部分出来而已啊
少年,你的基础 ……

我也不求积分,觉得你需要好好看书。

sunzhiguolu 发表于 2017-06-28 22:26

本帖最后由 sunzhiguolu 于 2017-06-28 22:28 编辑

回复 22# 523066680
是啊,基础不行才希望通过积分悬赏的形式 寻找技术强 热心 有耐心的大神解答一下。
比如:
多个层次的判断可以减少大量冗余的排列过程,例如第一个判断:
当容器数组达到3个元素,可以计算第一行是否和为15,不是的话可以提前退回,节省后面6个元素的排列过程。
后面的判断与此类似。
最后当容器数组的元素达到9个,且最后斜线合计也为15,对符合要求的排列顺序进行输出。
上贴所说,退回 退回到哪里,接下来处理过程会怎样执行。这些都没有讲清楚,怎能不让人提出疑问?
少年的基础的确不咋地,还麻烦大神多多指点。(在您没有失去耐心之前)

523066680 发表于 2017-06-28 22:40

本帖最后由 523066680 于 2017-06-28 23:20 编辑

回复 23# sunzhiguolu

你是在递归的部分不熟悉还是都不熟悉?我一直都是自学的,觉得可以自己消化的尽量自己消化。
只有这样才能提高解决问题的能力,不然会对求助解答产生依赖。
讲真如果你基础太少,别人实在没必要从非常基础的东西跟你说起,因为那会涉及一本书的很多内容,总结是可以总结的,但别人总归有工作要做。

元素排列的部分单独提取就是这些行,可以单独执行,加个print 可以观察数组的变化过程
E_( [ 1 .. 9 ], [] );

sub E_
{
    my ( $a, $b ) = @_;
    #此处省略若干代码
    E_( [ @$a[ 0 .. $_ - 1, $_ + 1 .. $#$a ] ], [ @$b, $a->[$_] ] )
      for 0 .. $#$a;
}
转成直白点的代码就是
func( , [] );

sub func
{
    my ( $a, $b ) = (shift, shift);
    print join(",", @{$b}), "\n" if ( $#$a < 0 );
   
    for my $idx ( 0 .. $#$a )
    {
      my @arr = @$a;
      my @brr = @$b;

      push @brr, $arr[$idx];   #get element, from @arr to @brr
      splice( @arr, $idx, 1 ); #delete element from @arr

      func( \@arr, \@brr );    #next level
    }
}

分析代码的时候,可以自己对代码进行拆解,对中间插入 printf 来查看输出内容或者 尝试 perl -d xxx.pl 进入调试模式
也可以在草稿上画出代码演算的过程,相信很多人都经历过。

而你可能并没有这么做,也许是因为懒惰,不愿意有“多余”的付出。

最后,解释权应该交给 rubyish,谁让你写的那么短

rubyish 发表于 2017-06-29 04:49

回复 18# sunzhiguolu

如果代码 添加了 use warnings; 该怎样改动一下?OK,

add
use warnings;
NO warnings;
perl version 26, subversion 0 (v5.26.0)

rubyish 发表于 2017-06-29 05:02

v2:
real        0m0.079s
user        0m0.065s
sys        0m0.004s

#!/usr/bin/perl
# version 26, subversion 0 (v5.26.0)

use 5.010;

explore();

# ______________________ SUB ______________________

sub explore { E_(0) }

sub E_ {
    my $n = shift;
    state $b   = [ (0) x 4 ];
    state $has = [ (0) x 10 ];
    state $in = [ [ 0, 1 ], [ 2, 3 ], [ 0, 2 ], [ 1, 3 ], [ 0, 3 ] ];

    if ( $n == 4 ) {
      my ( @test, @x ) = (0) x 10;
      $test[$_] = 1 for @$b;
      
      for my $i (@$in) {
            my $it = $b->[ $i-> ] + $b->[ $i-> ];
            return if $it < 6 or $it > 14;
            $it = 15 - $it;
            return if $test[$it]++;
            push @x, $it;
      }

      return if $x + $b-> + $x != 15;
      my @X = ( @$b[ 0, 1 ], $x, @$b[ 2, 3 ], @x[ 1 .. 4 ] );

      say join ' ', @X[ 0, 1, 2 ];
      say join ' ', @X[ 3, 4, 5 ];
      say join ' ', @X[ 6, 7, 8 ];
      say '-----';
      return;
    }

    for my $it ( 1 .. 9 ) {
      next if $has->[$it];
      $has->[$it]++;
      $b->[$n] = $it;
      E_( $n + 1 );
      $has->[$it]--;
    }
}

__DATA__
$_


rubyish 发表于 2017-06-29 05:19

回复 23# sunzhiguolu

kankan:
0    []
1    
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         
1    
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         
1    
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         
1    
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         
2       
3          
4 []         
3          
4 []         

jason680 发表于 2017-06-29 06:23

本帖最后由 jason680 于 2017-06-29 06:50 编辑

回复 22# 523066680

>> 少年,你的基础 ……

简言之

7楼是 5楼 实例   ( 10楼也是 实例)
5楼是 7楼 说明/基础

5楼是基础,但他.....
只想要实例,看了实例又不懂......

基础工作 只能留给他 慢慢消化 才能提高....

523066680 发表于 2017-06-29 10:10

本帖最后由 523066680 于 2017-06-29 17:42 编辑

灵魂图解 —— 递归排列过程(请点开大图或者下载PDF,再次吐槽CU的附件下载方式,还得关注公众号扫二维码)

红色线是返回的过程,怕图片篇幅太大没有把第一层的全部过程放进去,自行脑补。

523066680 发表于 2017-06-29 18:58

伤心,良心做图,赞都没有
页: 1 2 [3] 4
查看完整版本: 小学一年级数学题 - 系列-3