さまざまな言語で数値計算
Only Do What Only You Can Do
組合せ
組合せ (異なる 個のものから 個取ってできる組合せの総数)は, 次の式で表せます.
また, 次の漸化式を用いて計算することもできます.
この節では, この漸化式を使って, 異なる $ 10 $ 個のものから $ 5 $ 個取ってできる組合せの総数を求めます.
VBScript
'組合せ Private Function Comb(n, r) If (r = 0) Or (r = n) Then Comb = 1 ElseIf r = 1 Then Comb = n Else Comb = Comb(n - 1, r - 1) + Comb(n - 1, r) End If End Function '組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) Dim n: n = 10 Dim r: r = 5 WScript.Echo(Comb(n, r))
Z:\>cscript //nologo 0408.vbs 252
JScript
// 組合せ function Comb(n, r) { if (r == 0 || r == n) return 1 else if (r == 1) return n else return Comb(n - 1, r - 1) + Comb(n - 1, r) } // 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) var n = 10 var r = 5 WScript.Echo(Comb(n, r))
Z:\>cscript //nologo 0408.js 252
PowerShell
# 組合せ function Comb($n, $r) { if (($r -eq 0) -or ($r -eq $n)) { 1 } elseif ($r -eq 1) { $n } else { (Comb ($n - 1) ($r - 1)) + (Comb ($n - 1) $r) } } # 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) $n = 10 $r = 5 Write-Host (Comb $n $r)
Z:\>powershell -file 0408.ps1 252
Perl
# 組合せ sub Comb { my ($n, $r) = @_; if ($r == 0 || $r == $n) { 1; } elsif ($r == 1) { $n; } else { Comb($n - 1, $r - 1) + Comb($n - 1, $r); } } # 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) $n = 10; $r = 5; print Comb($n, $r), "\n";
Z:\>perl 0408.pl 252
PHP
<?php # 組合せ function Comb($n, $r) { if ($r == 0 || $r == $n) return 1; elseif ($r == 1) return $n; else return Comb($n - 1, $r - 1) + Comb($n - 1, $r); } # 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) $n = 10; $r = 5; echo Comb($n, $r), "\n"; ?>
Z:\>php 0408.php 252
Python
# coding: Shift_JIS # 組合せ def Comb(n, r): if (r == 0 or r == n): return 1 elif (r == 1): return n else: return Comb(n - 1, r - 1) + Comb(n - 1, r) # 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) n = 10 r = 5 print Comb(n, r)
Z:\>python 0408.py 252
Ruby
# 組合せ def Comb(n, r) if (r == 0 || r == n) 1 elsif (r == 1) n else Comb(n - 1, r - 1) + Comb(n - 1, r) end end # 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) n = 10 r = 5 puts Comb(n, r)
Z:\>ruby 0408.rb 252
Groovy
Pascal
Program Pas040101(arg); // 組合せ function Comb(n: Integer; r: Integer): Longint; begin if (r = 0) or (r = n) then Comb := 1 else if r = 1 then Comb := n else Comb := Comb(n - 1, r - 1) + Comb(n - 1, r); end; var n: Integer; r: Integer; begin // 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) n := 10; r := 5; writeln(Comb(n, r)); end.
Z:\>fpc Pas0408.pp -v0 Free Pascal Compiler version 2.6.2 [2013/02/12] for i386 Copyright (c) 1993-2012 by Florian Klaempfl and others Z:\>Pas0408 252
Ada
VB.NET
Module VB040101 '組合せ Private Function Comb(ByVal n As Integer, ByVal r As Integer) As Integer If (r = 0) OrElse (r = n) Then Return 1 ElseIf r = 1 Then Return n Else Return Comb(n - 1, r - 1) + Comb(n - 1, r) End If End Function Sub Main() '組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) Dim n As Integer = 10 Dim r As Integer = 5 Console.WriteLine(Comb(n, r)) End Sub End Module
Z:\>vbc -nologo VB0408.vb Z:\>VB0408 252
C#
using System; public class CS040101 { // 組合せ private static int Comb(int n, int r) { if (r == 0 || r == n) return 1; else if (r == 1) return n; else return Comb(n - 1, r - 1) + Comb(n - 1, r); } public static void Main() { // 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) int n = 10; int r = 5; Console.WriteLine(Comb(n, r)); } }
Z:\>csc -nologo CS0408.cs Z:\>CS0408 252
Java
public class Java040101 { // 組合せ private static int Comb(int n, int r) { if (r == 0 || r == n) return 1; else if (r == 1) return n; else return Comb(n - 1, r - 1) + Comb(n - 1, r); } public static void main(String []args) { // 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) int n = 10; int r = 5; System.out.println(Comb(n, r)); } }
Z:\>javac Java0408.java Z:\>java Java0408 252
C++
#include <iostream> #include <math.h> using namespace std; // 組合せ int Comb(int n, int r) { if (r == 0 || r == n) return 1; else if (r == 1) return n; else return Comb(n - 1, r - 1) + Comb(n - 1, r); } int main() { // 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) int n = 10; int r = 5; cout << Comb(n, r) << endl; return 0; }
Z:\>bcc32 CP0408.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland CP0408.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Z:\>CP0408 252
Objective-C
#import <Foundation/Foundation.h> // 組合せ int Comb(int n, int r) { if (r == 0 || r == n) return 1; else if (r == 1) return n; else return Comb(n - 1, r - 1) + Comb(n - 1, r); } int main() { // 組合せ (異なる 10 個のものから 5 個取ってできる組合せの総数) printf("%d\n", Comb(n, r)); return 0; }
Compiling the source code.... $gcc `gnustep-config --objc-flags` -L/usr/GNUstep/System/Library/Libraries -lgnustep-base main.m -o demo -lm -pthread -lgmpxx -lreadline 2>&1 Executing the program.... $demo 252
D
Go
Scala
対話型実行環境を起動
Z:\>scala Welcome to Scala version 2.10.2 (Java HotSpot(TM) Client VM, Java 1.7.0_21). Type in expressions to have them evaluated. Type :help for more information.
// 組合せ def Comb(n: Int, r: Int): Int = { (n, r) match { case (_, 0) => 1 case (_, 1) => n case (_, _) if n == r => 1 case (_, _) => Comb(n - 1, r - 1) + Comb(n - 1, r) } }
// 異なる 10 個のものから 5 個取ってできる組合せの総数 val n = 10 val r = 5 Comb(n, r)
res0: Integer = 252
終了
scala> :quit
F#
対話型実行環境を起動
Z:\>fsi Microsoft (R) F# 2.0 Interactive build 4.0.40219.1 Copyright (c) Microsoft Corporation. All Rights Reserved. For help type #help;;
// 組合せ let rec Comb(n:int) (r:int):int = match n, r with | _, 0 -> 1 | _, 1 -> n | _, _ when n = r -> 1 | _, _ -> Comb (n - 1) (r - 1) + Comb(n - 1) r
// 異なる 10 個のものから 5 個取ってできる組合せの総数 let n = 10 let r = 5 Comb n r
val it : int = 252
終了
> #quit;;
Clojure
対話型実行環境を起動
Z:\>java -cp C:\ProgramFiles\clojure-1.5.1\clojure-1.5.1.jar clojure.main Clojure 1.5.1
; 組合せ (defn Comb [n r] (cond (or (= r 0) (= r n)) 1 (= r 1) n true (+ (Comb (- n 1) (- r 1)) (Comb (- n 1) r))))
; 異なる 10 個のものから 5 個取ってできる組合せの総数 (def n 10) (def r 5) (Comb n r)
252
終了
user=> (. System exit 0)
Haskell
対話型実行環境を起動
Z:\>ghci GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done.
-- 組合せ comb n 0 = 1 comb n 1 = n comb n r | n == r = 1 | otherwise = (comb (n - 1) (r - 1)) + (comb (n - 1) r)
-- 異なる 10 個のものから 5 個取ってできる組合せの総数 let n = 10 let r = 5 comb n r
252
終了
Prelude> :quit Leaving GHCi.