Я работал над проблемой scala рекурсии. Я использовал для разработки программы с использованием циклов, а затем использовал концепцию рекурсии для преобразования существующей проблемы l oop в рекурсивное решение.
Поэтому я написал следующий код, чтобы найти идеальное число с использованием циклов.
def isPerfect(n: Int): Boolean = {
var sum = 1
// Find all divisors and add them
var i = 2
while ( {
i * i <= n
}) {
if (n % i == 0) if (i * i != n) sum = sum + i + n / i
else sum = sum + i
i += 1
}
// If sum of divisors is equal to
// n, then n is a perfect number
if (sum == n && n != 1) return true
false
}
Вот моя попытка преобразовать его в рекурсивное решение. Но я получаю неверный результат.
def isPerfect(n: Int): Boolean = {
var sum = 1
// Find all divisors and add them
var i = 2
def loop(i:Int, n:Int): Any ={
if(n%i == 0) if (i * i != n) return sum + i + n / i
else
return loop(i+1, sum+i)
}
val sum_ = loop(2, n)
// If sum of divisors is equal to
// n, then n is a perfect number
if (sum_ == n && n != 1) return true
false
}
Заранее спасибо.