Как работает оператор case в функции?
У меня есть следующий код рубина:
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)
часть кода. Пожалуйста, объясни.
1 ответ
Решение
Это 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