# iterative program to sum elements of an array # store in a file such as "sum.mpd" # compile by executing "mpd sum.mpd" # run by executing "a.out size" # # Version "rekursives Doppeln", Jost Berthold # (Original aus mpd-Tutorial) ############################################## resource sum() # forward-Deklaration von sumR für die Rekursion op sumR(int a[1:*]) returns int; # declare and read first command-line argument int size; getarg(1,size); # declare and initialize array a int a[1:size]; # same as int a[size] for [i = 1 to size] { a[i] = i; } # Aufruf der Rekursion: int total total = sumR(a) write("the sum of 1 ...", size, "is", total); # Rekursive Prozedur sumR proc sumR(a) returns sum { int laenge laenge = ub(a) if (laenge == 1) { sum=a[1]; } else { real halb; int teilen halb = ceil( log(laenge,2) ) - 1 teilen = int(2**(halb)) int i,links,rechts for[i = 0 to 1] { links = sumR(a[1:teilen]) rechts= sumR(a[teilen+1 : laenge]) } sum = links + rechts } # return sum, implizit } end