zoukankan      html  css  js  c++  java
  • 四种语言完美实现组合算法

    php

    <?php
    
    function rxn($start, $bit, $n, $m) {
        static $name = __FUNCTION__;
        static $result = array();
        static $arr = array();
        
        for ($i=$start; $i<$n-$m+$bit; $i++) {
            $arr[$bit-1] = $i;
            if ($bit == $m) {
                array_push($result, $arr);
            } else if ($bit < $m) {
                $name($i+1, $bit+1, $n, $m);
            }
        }
        return $result;
    }
    
    $result = rxn(0,1, 3,2);
    
    var_dump($result);
    

     

    js

    var result = [];
    var rxn = function(start, bit, arr, n, m) {
        var name = arguments.callee;
        
        for (var i=start; i<n+m-bit; i++) {
            arr[bit-1] = i;
            if (bit == m) {
                result.push(Array.prototype.slice.call(arr));
            } else if (bit < m) {
                name.call(null,i+1, bit+1, arr, n, m);
            }
        }
    }
    
    var n = 3,
        m = 2;
        
    ret = rxn(0,1,[],n,m);
    console.log(result);
    

    python 

    #! /usr/bin/python3
    
    import copy
    
    def rxn(start, bit, arr, n, m, result=[]):
        for i in range(start, n+m-bit):
            arr[bit-1] = i
            if bit == m:
                result.append(copy.copy(arr))
            elif bit < m:
                rxn(i+1, bit+1, arr, n, m)
        return result
    
    n, m = 3, 2
    result = rxn(0,1,[None for i in range(m)], n, m)
    
    print(result)
    

    go

    package main
    
    import "fmt"
    
    var result [][]int
    
    func rxn(start, bit, n, m int, arr map[int]int) {
        for i:=start; i<n+m-bit; i++ {
            arr[bit-1] = i
            if bit == m{
                var t []int
                for _, v := range arr {
                    t = append(t, v)
                }
                result = append(result, t);
            } else if bit < m {
                rxn(i+1, bit+1, n, m, arr)
            }
        }
    }
    
    func main() {
        n,m := 3,2
        arr := make(map[int]int)
        rxn(0, 1, n, m, arr)
        
        fmt.Println(result)
    }
    

      

  • 相关阅读:
    快速上手系列:JavaScript
    快速上手系列:CSS
    快速上手系列:HTML
    滑雪 记忆化搜索简单模型
    洪水
    选数
    斐波拉契数列
    CSS_01_css和html的结合1、2
    struts_24_基于XML校验的规则、特点
    struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)
  • 原文地址:https://www.cnblogs.com/mtima/p/3409605.html
Copyright © 2011-2022 走看看