2017-06-19 4 views
0

Wie würden Sie den "else" -Teil dieser verschachtelten for-Schleife interpettieren?Interpretieren von komplizierten verschachtelten Schleifen

Ich habe meinen Versuch auf der Unterseite gegeben, aber ich kämpfe um meinen Kopf herum, wie der andere Teil funktioniert, wenn man bedenkt, dass a bereits definiert ist. Das Ergebnis von y (1,2,3,4) ist 16, so dass nach meinen Berechnungen der Vektor in diesem Schritt um einen Wert von 6 zunimmt, da die anderen Schritte nicht gelten.

y=function(a,b,c,d) 
{ 
if(a>b){ 
while(b<d){ 
    b=b+a 
} 
for(e in c(a,c,d)){ 
b=b-e 
}} 
else{ 
for(a in 1:c){ 
    a=a+d 
}} 
if(b>c){ 
c= c*d + a-b} 
return(sum(a,b,c,d)) 
} 

y(1,2,3,4) 

Meine Interpretation:

nur gültig, wenn a> b (wenn nicht: überspringen zu "else Schritt") Halt a nach b Zugabe, solange es b überschreiten tut (die letzte Stufe stoppen bevor es geschieht) Sage e in c (a = 1, b = 2, c = 3), würden wir tun (b - a - c - d) oder technisch b-1, dann (b-1) -2, dann (b-3) -3 b =

Nur wenn ein < b es gilt - das ist der Teil den ich nicht verstehe ????

Der nächste Schritt nach der ersten if/else-Schleife: nur c neu berechnen mit den neuesten Werten von a, b, d, c aus der Zeit nach der ersten Schleife Summe alle Elemente des endgültigen Vektors

Antwort

1

Dies ist, was erscheint geschehen zu sein, wenn Sie y anrufen (1,2,3,4)

# First check if a > b 
# a = 1, b = 2 do nothing 
# 
# else if a < b then run for loop 
# for(a in 1:c) 
# first run through 
#  a = 1 
#  a = 1 + 4 
#  a = 5 
# second run through 
#  a = 2 (Note a has been overwritten as to by for loop iteration) 
#  a = 2 + 4 
#  a = 6 
# third and final run through 
#  a = 3 (Note a has again been overwritten by for loop iteration) 
#  a = 3 + 4 
#  a = 7 
# 
# After for loop completes check if b > c 
# b = 2, c = 3 do nothing 
# 
# return statement 
# sum all values 
# a = 7, b = 2, c = 3, d = 4 
# 7 + 2 + 3 + 4 = 16 
# return 16 
Verwandte Themen