Ich bin neu in die Programmierung und während einige Fragen zu üben stieß ich auf einen Code in CWas wird die Ausgabe dieser beiden Codes sein?
void count(int n)
{
static int d = 1;
printf("%d ", n);
printf("%d ", d);
d++;
if(n > 1) count(n-1);
printf("%d ", d);
}
int main()
{
count(3);
}
Output:
3 1 2 2 1 3 4 4 4
Kann jemand mir das erklären, warum die Ausgabe nicht 3 1 2 1 2 3 4 wie ich erwarte ist. Ich habe versucht, diesen Code in Java zu schreiben und die Ausgabe ist nicht einmal in der Nähe meiner Erwartung
public static void main (String[] args)
{
count(3);
}
static void count(int n){
int d = 1;
System.out.print(n+" ");
System.out.print(d+" ");
d++;
if(n>1)count(n-1);
System.out.print(d+" ");
}
Output:
3 1 2 1 1 1 2 2 2
Gibt es etwas ich fehle über Funktion und Methode Prozedur aufrufen.
Warum hast du erwartet single '4' und nicht' 4 4 4'? Sie haben "count" dreimal aufgerufen und zuletzt "printf" ("% d", d); "ist immer gewährleistet, da es zu dieser Methode gehört und nicht Teil eines bedingten Blocks ist. In Bezug auf das Java-Codebeispiel ist "d" nicht statisch, also gehört es nicht zur Klasse, sondern ist einfach eine lokale Variable, so dass jedes Mal, wenn Sie die "count" -Methode aufrufen, ein eigenes "d" erzeugt, mit "1" initialisiert, inkrementiert und dann am Ende ausdrucken. – Pshemo
In der C-Code, wenn Sie es mit Bleistift und Papier folgen, werden Sie sehen, dass die zusätzlichen '4' am Ende jeder Rekursion gedruckt werden. Erst nach dem rekursiven Aufruf 'count (n-1);' wird der zweite 'printf ("% d ", d);', nacheinander geschehen –
[Es ist Déjà vu noch einmal] (http: // stackoverflow. com/questions/38281902/dont-use-compiler-c-programm-ausgabe-erklärung-benötigt-in-logik? noredirect = 1 # comment63982750_38281902). Schade, dass diese Frage gelöscht wurde.Und Ihre Java-Version ist nicht äquivalent, da die Variable "d" in dieser Quelle nicht statisch ist, wie in der C-Quelle. – WhozCraig