我试图在没有实际使用范围函数的情况下递归写入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,])
答案 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
是递归的。
当然,每个函数都会调用自身,从这个意义上讲是递归的。
希望这会有所帮助。