我正在尝试在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,我考虑过不断减少数字,以便获得每个数字。但是,这将使代码太长,我不确定如何从那里继续。任何帮助,将不胜感激。
您可以通过分成几部分来解决此问题。
Part(A)的第一部分是制作一个简单的函数,该函数将数字的位数相乘。例如:
(multiply-digits 231) ;=> 6
部分(B)的第二部分是制作一个函数,该函数接受一个函数和一个输入,并一直将该函数应用于输入,直到它不变为止。
(functional-persistence fn x)
然后您可以像这样定义multiplicative-persistence
:
(define (multiplicative-persistence x)
(functional-persistence multiply-digits x))
要完成(A)部分,您可以将递归与quotient
和remainder
函数一起使用,以将数字重复除以10所得的数字。使用以值1开头的累加器参数将这些值相乘。
要完成(B)部分,您可以再次使用递归来循环并将新值(fn x)
与旧值x
进行比较,当它们为EQUAL?
时,您可以返回该值。