我正在对递归进行复习,并制作了一个像这样的python文件:
#!/usr/bin/python
import sys
if (len(sys.argv)!=3):
raise ValueError('Please provide two dimensions.')
else:
pass
def plotLand(a,b):
if(a==b):
print(a)
return a
if(a<b):
c=b%a
b = c if(c!=0) else a
else:
c = a%b
a = c if (c!=0) else b
plotLand(a,b)
result = plotLand(int(sys.argv[1]),int(sys.argv[2]))
print(result)
我添加了print(a)
只是为了检查我的函数是否返回值。我以这种方式在Linux终端中调用此文件:
python algorithms.py 1680 64
这是我的输出:
80
None
我的递归函数内部的print函数正在打印值,但是我没有得到函数的返回值。如前所述,原始功能没有打印功能。
答案 0 :(得分:3)
递归函数的工作方式与非递归函数完全相同–如果您不写return
和值,则返回None
,并且仅在a == b
时返回任何值。
您需要
return plotLand(a,b)
我还认为您可以将代码缩短为
def plotLand(a,b):
small, large = sorted((a,b))
remainder = large % small
return plotLand(remainder, small) if remainder else a
答案 1 :(得分:0)
您只返回一种情况。您可以考虑在函数末尾添加默认值