2017-06-19 8 views
0

このネストされたforループの "else"部分をどのように解釈しますか?複雑なネストされたループの解釈

私は底に私の試みを与えましたが、私は、すでに定義されていることを考慮して、else部分がどのように機能するかについて頭を悩ましています。 y(1,2,3,4)の結果は16なので、私の計算では、そのステップでベクトルが6増加します。これは他のステップが成り立たないためです。

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) 

私の解釈:

のみ有効> Bならば(ない場合:「他のステップ」に進んでください) キープBへの追加、限り、それはBを超えdoesntのよう(最後のステップを停止(b-a-c-d)、または技術的にはb-1、次に(b-1)-2、 (b-3)-3 b = be

<bが適用される場合のみ - これは私が理解できない部分ですか?最初のif /他のループの後

次のステップ:ただ、最終的なベクトルのすべての要素最初のループ 合計した後から、C、B、Dの最新の値とCを再計算

答えて

1

これが表示されるものですあなたがy(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