Python范围本身就是函数

时间:2015-11-15 20:26:13

标签: python recursion range

我试图在没有实际使用范围函数的情况下递归写入python函数,范围,所以如果我有一个函数Range(lo,hi),Range(3,7)会返回[3,4] ,5,6]

到目前为止我所拥有的:

    System.Runtime.InteropServices.COMException was unhandled by user code
  ErrorCode=-2147467259
  HResult=-2147467259
  Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
  Source=mscorlib
  StackTrace:
       at System.EventHandler`1.Invoke(Object sender, TEventArgs e)
       at System.Runtime.InteropServices.WindowsRuntime.ICommandAdapterHelpers.<>c__DisplayClass2.<CreateWrapperHandler>b__3(Object sender, EventArgs e)
       at FavQuotesMain.ViewModels.Command.<.ctor>b__3_0(Object s, Object e)
  InnerException: 

我知道这是完全错误的,但我也有:

def Range(lo,hi):
    if hi <= lo:
        return []
    else:
        return Range(lo - 1) + ([hi - 1,])

3 个答案:

答案 0 :(得分:3)

试试这个:

def Range(lo,hi):
    if hi <= lo:
        return []
    return [lo] + Range(lo + 1,hi)

您忘记将当前lo递归编号添加到列表

答案 1 :(得分:3)

在第一次尝试时,您忘记将两个参数传递给递归调用。此外,您不需要在hi - 1之后使用逗号或列表周围的括号。

在第二次尝试中,您忘记将hi - 1附加到递归调用返回的列表中。

def Range(lo,hi):
    if hi <= lo:
        return []
    else:
        return Range(lo, hi - 1) + [hi - 1]

答案 2 :(得分:1)

你好!

有趣的问题!我想出了两个解决方案:

def myRange1(start, stop, step=1, ans=None):
    assert step >= 0;
    ans = ans or [];
    if (start >= stop):
        return ans;
    # Otherwise...
    ans.append(start);
    return myRange1(start + step, stop, step, ans);

def myRange2(start, stop, step=1):
    assert step >= 0;
    if (start >= stop):
        return [];
    # Otherwise...
    return [start] + myRange2(start + step, stop, step);

在类似Lisp的术语中,myRange1是迭代的,myRange2是递归的。
当然,每个函数都会调用自身,从这个意义上讲是递归的。

希望这会有所帮助。