我有以下ruby代码:
def xyz(n)
case n
when 0
0
when 1
1
else
xyz(n - 1) + xyz(n - 2)
end
end
puts xyz(ARGF.gets.to_i)
我将代码执行为:
Ruby$ echo "4" | ruby test.rb
我想知道答案如何成为3
。我不明白:
xyz(n - 1) + xyz(n - 2)
部分代码。请解释一下。
答案 0 :(得分:3)
这是recursive
函数,通过itself
以下是每个步骤中不同的steps of the function execution
和output
:
第1步:
def xyz(n)
n = 4.
case n
when 0
0
when 1
1
else
n = 4, so it comes here and calls
xyz(n - 1) + xyz(n - 2)
xyz(3) + xyz(2) // no result
end
end
没有o / p,因为这两个条件都会进行递归调用
第2步:
def xyz(n)
n = 3.
case n
when 0
0
when 1
1
else
n = 3, so it comes here and calls
xyz(n - 1) + xyz(n - 2)
xyz(2) + xyz(1) // recursion stops here as case 1 is 1 // so o/p is 1 for hjere
end
end
o / p是一个,因为xyz(1)将执行为1。 目前的O / p:1 总体O / p:1
第3步:
def xyz(n)
n = 2.
case n
when 0
0
when 1
1
else
n = 2, so it comes here and calls
xyz(n - 1) + xyz(n - 2)
xyz(1) + xyz(0) // 1
end
end
此处o / p再次为1,因为xyz(1)
将执行到1
,
目前的O / p:1
总体O / p:1 + 1 ==> 2 强>
第4步:
def xyz(n)
n = 2.
case n
when 0
0
when 1
1 // 1
else
n = 1, I wont come here
xyz(n - 1) + xyz(n - 2)
end
end
此处o / p再次为1,因为case 1
将执行到1
,
目前的O / p:1
总体O / p:1 + 1 + 1 ==> 3 强>
因此,最终输出为3