2016-06-18 6 views
-1

Wenn ich Array a [] = {2,3,5} resultierende Array sollte {(2 * 3) 6, (2 * 5) 10, (3 * 5) 15} . Sie können keine Schleife verwenden. Dies kann mit Rekursion gelöst werden, aber ich kann es nicht lösen.Array Elemente multiplizieren ohne Schleife zu verwenden

+0

Loops können mechanisch in Rekursion umgewandelt werden, nicht, dass es Ihnen viel Gutes tut .. – harold

+0

@harold Es geht nicht um die Produktivität. Hier geht es um Problemlösung. – user1547535

Antwort

0

Rekursiv multiplizieren Sie ein Array.

void multiply(double[] a, double[] b, index){ 
    if(index==a.length){ 
     return; 
    } 
    a[index] = a[index]*b[index]; 
    multiply(a, b, index+1); 
} 
+0

Wenn ich das Beispiel aus der Frage bearbeiten möchte, welchen Parameter würde ich an 'multipl (a, b, index)' liefern? Was wäre das Ergebnis? Was ist 'multiply()'? – greybeard

+0

@greybeard multiplizieren ist die oben beschriebene Methode, es ruft sich selbst und das macht es rekursiv. Dein Beispiel hat nicht genug Informationen. Das erste Element ist '(2 * 3) 6' für die meisten mathematischen Notationen, also 2 * 3 * 6? Sagen wir es ist nicht, sind die Elemente alle Kombinationen? Müssen sie in Ordnung sein? – matt

+0

'multiplizieren ist die oben beschriebene Methode ', warum liest die Deklaration' multipl() '? 'Ihr Beispiel hat nicht genügend Informationen', wird aber gut beobachtet, aber für das Beispiel ist [user1547535] (http://stackoverflow.com/users/1547535/user1547535) eher mein als mein. (Und diese Beobachtung könnte einen Kommentar zu der Frage erfordern, anstatt nach einer Antwort. Wenn ich es wäre, würde ich nach den Produkten aller Paare mit dem ersten Index rufen, der kleiner als der zweite in lexikographischer Reihenfolge ist.) – greybeard

0
int multiply1(int n, int left, int right) 
{ 

    if(left==(n-1)) 
     return 1; 

    //System.out.print(arr[left]+" "); 
    //System.out.print(arr[right]+" "); 
    System.out.println(arr[left]*arr[right]); 
    right++; 
    if(right==n) 
    { 
     left++; 
     right=left+1; 
    } 
    multiply1(n, left, right); 
    //arr1[start]=arr[ind]*arr[next]; 
    //multiply1(start+1, ind, next+1); 
    return 0; 
} 
+0

(Während es mir schwer fällt zu erkennen, was die Frage stellt :) Was beantwortet dieser Beitrag, und was ist das Ergebnis daraus? (Der Kommentar '// arr1 [start] = arr [ind] * arr [next];' verwendet nicht-verwandte Namen.) – greybeard

+0

Resultierendes Array ist [6,10,15] – user1547535

Verwandte Themen