使用递归的n个数的最小公倍数

时间:2016-06-02 18:29:35

标签: python function recursion random numbers

我需要编写一个递归函数,它找到列表中n个长度最不常见的多个元素。 我的代码:

import random

def random_num(n):
    return [random.randint(-20,20) for i in range(n)]

def gcd(a, b):
    if b == 0: 
        return a
    else: 
        return gcd(b, a % b)

def my_nok(n,m):
    return (n/gcd(n,m))*m

第一个问题是:我的函数只能使用两个参数,而不是整个列表。

第二个问题:我需要只有一个函数来查找最小公倍数(我的代码包含两个)。

3 个答案:

答案 0 :(得分:1)

您需要通过列表重现某些内容,例如以下内容。如果列表中有2个元素,请执行正常的LCM。如果它更长,则在列表尾部重复,然后使用该结果和第一个元素进行LCM。

def lcm(in_list):
    if len(in_list) == 2:
        # Do your normal LCM computation here
    else:
        return lcm([in_list[0], lcm(in_list[1:]))

答案 1 :(得分:1)

你需要找到整个清单的LCM。让" l"是整个阵列的LCM,如果我们从数组中选择任意2个随机数,他们将有一个LCM说" l1"依此类推等等#34; l2"," l3"," l4" ....这些的LCM也将是整个阵列的LCM。

def LCM_of_array(array):
    if len(array)==2:
        return LCM(a,b)
    else:
        return LCM( LCM_of_array(n[0:len(array)/2]) , LCM_of_array(n[len(array)/2:len(array)])

所以我的想法是你可以使用分而治之

def nod(a, b):   #to find GCD
   if b == 0:
      return a
   else:
    if a>b:
        return nod(b, a % b)

    else:
        return nod(a,b%a)   
def nok(a, b):    #to find LCM of two numbers
    return a * b / nod(a, b)

def nok_of_array(n):    #function for LCM of array
    if len(n) == 2:
        return nok(n[0], n[1])
    else:
        return nok (nok_of_array(n[ 0:len(n)/2 ]) , nok_of_array( n [ len(n)/2 : len(n)]))

您可以明确定义LCM(a,b)或只添加一些代码行

编辑:代码

{{1}}

答案 2 :(得分:0)

我的代码,最后一次返回无效。

import random
def nod(a, b):
   if b == 0:
      return a
   else:
      return nod(b, a % b)
def nok(a, b):
   return a * b / nod(a, b)
def nok_of_array(n):
   if len(n) == 2:
      return nok(n[1], n[2])
   else:
      return nok(nok_of_array[0:len(n)/2], nok_of_array[len(n)/2:len(n)])
n = [random.randint(-20,20) for i in range(0, random.randint(1, 20))]
print(nok_of_array(n))
print(n)