Может кто-нибудь дать мне объяснение, как следующая функция работает рекурсивно. Я могу понять более простые рекурсивные примеры, но я не понимаю, как (smooth n (- k 1))
дает значение, которое требуется в инструкции или здесь.Рекурсивная функция схемы
(define (divides a b)
(= (modulo b a) 0))
(define (smooth n k)
(and (>= k 2)
(or (divides k n)
(smooth n (- k 1)))))
(define (isprime p)
(if (< p 2)
#f
(not (smooth p (floor (sqrt p))))))
Я написал isprime
функции, которая не использует 1
как простое число, но я до сих пор не совсем понимаю, как данная функция работает/как он работает с этим примером.
Это не отформатирован или исполняемым кодом. Этот случай довольно прост, но вы можете настроить его для удобства каждого, и тем более, что если новые пользователи найдут этот вопрос, он может быть им полезен. –
'smooth n k = Exists i In (k, k-1, ..., 2) SuchThat (n% i == 0)'. 'isprime p = p> = 2 && not (smooth p [sqrt p])'. Выбор названия неудачен: [плавные числа] (https://en.wikipedia.org/wiki/Smooth_number) - это что-то еще. Обратный порядок тестирования лучше - цифры, скорее всего, имеют меньшие факторы, чем более крупные факторы. –