【问题标题】:Trying to make a function adding numbers recursivly from set values试图使函数从设定值递归地添加数字
【发布时间】:2020-03-28 16:48:49
【问题描述】:

我正在尝试创建一个递归函数来添加从开始到停止的所有数字 (recursive_sumrange(start,stop)。一些输出示例如下。

recursive_sumrange(7, 2) >> 27

recursive_sumrange(2, 7) >> 27

recursive_sumrange(2, 2) >> 2

recursive_sumrange(-1, 1) >> 0

我尝试了以下代码,但它不会添加范围内的最后一个数字,如果起始值大于终止值,它也不起作用。

def recursive_sumrange(start, stop):
    lst = ""
    if(start == stop):
        return 0
    else:
        lst = [elem for elem in range(start, stop+1)]
        return lst[0] + recursive_sumrange(start+1, stop)

print(recursive_sumrange(int(input("Enter start: ")), int(input("Enter stop: "))))

编辑这是提出的解决方案:

def recursive_sumrange(start, stop):
    lst = ""
    if(start == stop):
        return start
    elif(start >  stop):
        lst = [elem for elem in range(stop, start+1)]
        return lst[0] + recursive_sumrange(start, stop+1)
    elif(start < stop):
        lst = [elem for elem in range(start, stop+1)]
        return lst[0] + recursive_sumrange(start+1, stop)

print(recursive_sumrange(int(input("Enter start: ")), int(input("Enter stop: "))))

【问题讨论】:

  • 看看你的代码,想想recursive_sumrange(2, 2)会发生什么。关于start &gt; stop,您应该在开始时检查,然后交换值。

标签: python python-3.x list python-2.7 recursion


【解决方案1】:

这应该可行,我添加了一个名为 first_itr 的新参数来处理是否以错误的顺序给出数字 (stop, start) 而不是 (start, stop)

def recursive_sumrange(start, stop, first_itr=True):
    if first_itr:
        start, stop = sorted([start, stop])
    if start > stop:
        return 0
    else:
        return start + recursive_sumrange(start+1, stop, False)

print(recursive_sumrange(7, 2))

【讨论】:

    【解决方案2】:

    试试:

    def recursive_sumrange(start, stop):
        if start > stop:
            return sum([i for i in range(stop, start + 1)])
        else:
            return sum([i for i in range(start, stop + 1)])
    
    
    print(recursive_sumrange(int(input("Enter start: ")), int(input("Enter stop: "))))
    

    【讨论】:

    • 嗨,我解决了,但这段代码更干净,但我不喜欢在打印出总和后它不打印任何内容,有没有办法解决这个问题。
    • 这是递归解决方案吗?!
    • @Pro-Grammer The None 正在打印,因为该函数不返回任何内容,以修复该问题,要么更改 print 语句以在函数中返回,要么在调用函数时删除 print最后一行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2015-03-23
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    相关资源
    最近更新 更多