Нет в scala такого класса "int".
Пользователь решил продолжить мысль [time]14 Август 2015, 01:31:03[/time]:
есть предположение что параметры которые передаются в функцию являются val (что-то вроде const в других языках) из-за этого с ними нельзя напрямую работать, тогда вопрос как с ними быть, не создавать ведь вечно локальные переменные.
Пользователь решил продолжить мысль [time]14 Август 2015, 01:43:57[/time]:
Что интересно, сижу тут, листаю книгу по scala и не могу найти в ней ни одного прямого обращения к параметру, везде через какое - нибудь присваивание, к счетчику цикла например.
Пользователь решил продолжить мысль [time]14 Август 2015, 02:02:43[/time]:
Отлично например работает такой вариант:
object Nod_Recursion{
def main(args: Array[String]) {
val a: Int = readInt()
val b: Int = readInt()
print(Nod_R(a, b))
}
def Nod_R(a: Int, b: Int): Int ={
if (b == 0)
return a
return Nod_R(b, a % b);
}
}
Пользователь решил продолжить мысль [time]14 Август 2015, 02:04:57[/time]:
Или бинарный вариант, с хвостовой рекурсией
object BNod{
def main(args: Array[String]): Unit = {
print(Nod(-5, 10))
}
def Nod(a: Int, b: Int): Int ={
if (a == 0) return b
if (b == 0) return a
if (a == b) return a
if (a == 1 || b == 1) return 1
if ((a % 2 == 0) && (b % 2 == 0)) return 2 * Nod(a / 2, b / 2)
if ((a % 2 != 0) && (b % 2 == 0)) return Nod(a, b / 2)
return Nod(b, (a - b).abs)
}
}
Пользователь решил продолжить мысль [time]14 Август 2015, 02:09:28[/time]:
Кстати учитывая что если в алгоритм Евклида передать отрицательные значения, то будет ошибка, тут можно даже воспользоваться тем что я объявил локальные переменные:
object Nod_Ev{
def main(args: Array[String]): Unit = {
print(Nod(10, 5))
}
def Nod(a: Int, b: Int): Int = {
var j: Int = a.abs
var i: Int = b.abs
while (j != 0 && i != 0) {
if (j > i) {
j %= i
}
else {
i %= j
}
}
return i + j
}
}