如何在方案中找到乘法持久性

问题描述 投票:1回答:1

我正在尝试在Scheme语言中找到数字的乘法持续性。持久性是一个功能可以继续应用多少次。例如,231成为2*3*1 = 6*1 = 6且持久性为2。我试图开始解决此问题,但无法继续/不知道如何继续。

(define (mp a)
  (define (num-digits n)
    (cond (( < n 10) 1)
          (else
           (+ 1 (num-digits (/ n 10))))))
  (cond ((< a 10) 1)
        (else
         (floor (/ a (expt 10 (- (num-digits a) 1)))))))

(mp 4098)

;上面的代码产生数字4,我考虑过不断减少数字,以便获得每个数字。但是,这将使代码太长,我不确定如何从那里继续。任何帮助,将不胜感激。

scheme
1个回答
0
投票

您可以通过分成几部分来解决此问题。

Part(A)的第一部分是制作一个简单的函数,该函数将数字的位数相乘。例如:

(multiply-digits 231) ;=> 6

部分(B)的第二部分是制作一个函数,该函数接受一个函数和一个输入,并一直将该函数应用于输入,直到它不变为止。

(functional-persistence fn x)

然后您可以像这样定义multiplicative-persistence

(define (multiplicative-persistence x)
  (functional-persistence multiply-digits x))

要完成(A)部分,您可以将递归与quotientremainder函数一起使用,以将数字重复除以10所得的数字。使用以值1开头的累加器参数将这些值相乘。

要完成(B)部分,您可以再次使用递归来循环并将新值(fn x)与旧值x进行比较,当它们为EQUAL?时,您可以返回该值。

© www.soinside.com 2019 - 2024. All rights reserved.