四种语言完美实现组合算法
2013-11-05 23:57
253 查看
php
js
python
go
<?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) }
相关文章推荐
- 计算机组成原理-存储器的分级
- 市场调研报告:手机刷机用户市场大摸底
- 迷茫的羔羊-失落了,伤心了,难过了
- BackBone 学习 (一)
- linux信号的默认处理方式
- 实时开发框架Meteor基础入门系列<零>--简介
- jdbc批处理优缺点
- 预处理
- Win32位图、坐标系,做出自己喜欢钟表
- python 中闭包理解,及函数string.maketrans(),string.translate()
- 硬盘坏块检测和隔离 推荐
- kill命令实现分析
- WindowsMobile配置英文ROM显示中文问题(解决程序中文乱码)
- Python基础:元类
- 设计模式学习系列4 简单工厂模式
- IIS 设置
- Java File和byte数据之间的转换
- Linux 命令学习心得
- 关于js的面向对象设计
- html页面的onunload、onbeforeunload