|
|
[这个贴子最后由elimqiu在 2013/01/01 04:46pm 第 1 次编辑]
为了跟陆老师的对应细节一致,对代码作了细微的改动。新代码如下:
def nr(n):
if n == 1:
return [1,1]
r = nr(n/2)
if n % 2 == 0:
return [r[0], r[0] + r[1]]
else:
return [r[0] + r[1], r[1]]
def rn(x, y = 1):
if isinstance(x,list):
if len(x) != 2:
return
r = x
if (isinstance(r[0],int) and isinstance(r[1],int)) != True:
return
if (r[0] == r[1] and r[0] > 1) or r[0] < 1 or r[1] < 1:
return
else:
r = [x,y]
if (isinstance(x,int) and isinstance(y,int)) != True:
retrun
if x < 1 or y < 1 or (x == y and x > 1):
return
if r[0] == r[1]: return 1
if r[0] < r[1]: return 2*rn(r[0],r[1] -r[0])
if r[0] > r[1]: return 1+ 2*rn(r[0] - r[1],r[1])
以下是原帖
对应法则参见陆老师的有关帖子,大概搜索了一下,没找到,请陆老师提供
代码如下:
def nr(n):
       if n == 1:
               return [1,1]
       r = nr(n/2)
       if n % 2 == 1:
               return [r[0], r[0] + r[1]]
       else:
               return [r[0] + r[1], r[1]]
def rn(x, y = 1):
       if isinstance(x,list):
               if len(x) != 2:
                       return
               r = x
               if (isinstance(r[0],int) and isinstance(r[1],int)) != True:
                       return
               if (r[0] == r[1] and r[0] > 1) or r[0] < 1 or r[1] < 1:
                       return
       else:
               r = [x,y]
               if (isinstance(x,int) and isinstance(y,int)) != True:
                       retrun
               if x < 1 or y < 1 or (x == y and x > 1):
                       return
       if r[0] == r[1]: return 1
       if r[0] < r[1]: return 1 + 2*rn(r[0],r[1] -r[0])
       if r[0] > r[1]: return 2*rn(r[0] - r[1],r[1]) |
|