Irgendwie schaffe ich es nicht einen Javacode (der funzt tadellos)
nach AutoIt zu portieren...
- Mir gehts um einen Performancetest, ob die rekursive Methode schneller
als meine ist, da meine Funktion die Fakultät nicht vollständig ausrechnet und somit
auch höhere Berechnungen schafft, im Gegensatz zu fak(n)/(fak(k) * fak(n-k))-
Vielleicht übersehe ich ja etwas
Quelle des Javaalgorithmus.
public class Ueb3_Aufg6 {
public static void main(String[] args) {
System.out.println("(49 über 6) = " + binom(49, 6));
}
/*** Rekursive Berechnung des Binomialkoeffizienten (n über k)*/
public static int binom(int n, int k){
// 1.Rekursionsanker
if(k == 0 || k == n) return 1;
// 2.Rekursionsanker
else if(k == 1) return n;
// Rekursionsschritt
else return binom(n-1,k) + binom(n-1,k-1);
}
}
Alles anzeigen
Meine Umsetzung:
Spoiler anzeigen
Func nueberk($n,$k) ; Mein Algorithmus
$a=1
For $i=$n To ($n-$k+1) Step -1
$a *= $i/(Abs($i-$n)+1)
Next
Return $a
EndFunc
Func binom($n,$k) ; Rekursion - scheint endlos zu laufen
If($k=0 Or $k=$n) Then
Return 1
ElseIf $k=1 Then
Return $n
Else
Return binom($n-1,$k)+binom($n-1,$k-1)
EndIf
EndFunc
Local $a,$b,$c
$a = TimerInit()
nueberk(49,6)
$b = TimerDiff($a)
$a = TimerInit()
binom(49,6)
$c = TimerDiff($a)
MsgBox(0,"Diff","Mein Algorithmus: "&$b&@CRLF&"Rekursion: "&$c)
[/autoit] [autoit][/autoit] [autoit]$a = TimerInit()
nueberk(5000,2313)
$b = TimerDiff($a)
$a = TimerInit()
binom(5000,2313)
$c = TimerDiff($a)
MsgBox(0,"Diff","Mein Algorithmus: "&$b&@CRLF&"Rekursion: "&$c)
[/autoit]
Edit1: Nach einer halben Ewigkeit kam die Rekursion (49,6) zu einer Lösung,
doch warum ist die Zeitmessung bei meinem Algorithmus so seltsam? (viel zu hohe Angabe)
Java gibt mir die Lösung 'sofort', wohingegen AutoIt endlos zu Rechnen scheint...
SO langsam ist AutoIt doch nicht, oder?