Найдите произведение цифр числа - PullRequest
0 голосов
/ 06 октября 2018

Я должен написать рекурсивную функцию, которая вычисляет произведение цифр числа.Я записал следующее:

let rec produsul_cifrelor x = if x = 0 then 0 else let n = x mod 10 in n * produsul_cifrelor (x/10)

Проблема в том, что он всегда возвращает мне 0. Я уверен, что что-то упускаю, но не могу выяснить.Можете ли вы помочь мне решить проблему?Код должен вычислять произведение цифр числа, например, если я введу 12345, он должен вернуть 1 * 2 * 3 * 4 * 5, что равно 120.

ОБНОВЛЕНИЕ

Я изменил код на это:

let rec produsul_cifrelor x = match x with | 0 -> 0
                                           | 1 -> 1
                                           | 2 -> 2
                                           | 3 -> 3
                                           | 4 -> 4
                                           | 5 -> 5
                                           | 6 -> 6
                                           | 7 -> 7
                                           | 8 -> 8
                                           | 9 -> 9
                                           | _ -> (x mod 10) * produsul_cifrelor (x/10)

Сейчас это работает, но у меня другой вопрос: есть ли более эффективный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

IMO, синтаксис будет выглядеть чище так:

let rec produsul_cifrelor x =
  match x with
  | n when n < 10 -> n
  | _ -> (x mod 10) * produsul_cifrelor (x/10)

Тогда выполнение produsul_cifrelor 12345 вернет 120.

0 голосов
/ 06 октября 2018

Ваш код всегда делает рекурсивный вызов, если параметр x не равен 0. Поскольку он не показывает признаков бесконечной рекурсии, вы знаете, что он возвращает 0 хотя бы один раз.Этого должно быть достаточно, чтобы показать, что не так.

Обновление

Вы проверяете ввод для 0, потому что ответ очевиден в этом случае.Но есть и другие материалы, где ответ очевиден.То есть, где вам не нужно делать никаких умножений, чтобы получить результат.Почему бы не проверить все это?Вы можете проверить все эти значения с помощью одного теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...