2015-12-19 208 views
0

这是我的任务:是递归算法实现的唯一解决方案?

创建一个函数find_largest实现以下

  1. 算法获取数字L1的列表,L2,L3 .... LN作为参数
  2. 假设L1是最大的,最大= L1
  3. 从列表中采取下一个号码李并执行以下操作
  4. 如果最大的是小于李
  5. 最大=李
  6. 如果李是从列表中最后一个号码,然后
  7. 回报最大,出来
  8. 否则,重复同样的过程从步骤3开始

,这是我的代码:

def get_algorithm_result(n): 
    if type(n) == type([]): 
    largest = n[0] 
    for item in n: 
    if largest < item: 
     largest = item 
    elif largest == n[-1]: 
     return largest 
    else: 
     pass 
    return largest 

虽然代码运行我没有实现第8步,说我应该重复从第3步开始的相同过程。我该怎么做

回答

1

您只需要使用for循环并跟踪迭代时看到的最大值,并在每次遇到更大的元素时更新mx。

def get_algorithm_result(n): 
    mx = n[0] 
    for item in n[1:]: 
     if item > mx: 
      mx = item 
    return mx 

您的解决方案将停止,如果elif largest == n[-1]:值为True所以[1,2,3,4,1]返回1为这是不正确的数量最多。 当循环结束时,您可以到达L[-1],检查数字是否为== L[-1]并不意味着该数字实际上是列表中的最后一个数字。

没有必要递归,但如果你想实现它,逻辑是相同的,你要看看每一个数字:

def get_rec(n, mx): 
    if not n: 
     return mx 
    return get_rec(n[1:],n[0]) if n[0] > mx else get_rec(n[1:], mx) 

你不走的说明逐字:

def get_algorithm_result(n): 
     mx = n[0] # 2. Assume L1(n[0]) is the largest 
     for item in n[1:]: # 3/8 get next number/ Else repeat same process starting from step 3 
      if item > mx: 4 # If Largest is less than Li 
       mx = item # 5 Largest = Li 
     return mx # 6/7 If Li is last number from the list then return Largest and come out 
+0

他的代码的工作方式是... – Idos

+0

我有。他有正确的解决方案并实施了所有步骤。他问他是否需要使用递归 - 他没有。 – Idos

+0

@Idos他的解决方案不正确 –