2017-03-13 76 views
0

我已经找到了解决方案,但找不到一个。我想做一个递归,但函数不能有一个返回语句。 这里是程序:Python递归(扩展)

n = input("Input a positive integer: ") 

text = open("Nummbers.txt", "w") 
text.write("Number inputed: " + str(n)) 
tree(n) 

def tree(n): 
    if(n>0): 
     tree(n-1) 
     print(n) 
     text.write(str(n)) 
     tree(n-1) 

当我运行它,它给了我一个“没有定义错误的树”。树必须如上所述书写。我如何得到这个正常工作,我已经看到了将其设置为这样所有的递归的教程,我使用python 2.7

+0

作为一个技术性,你的函数仍然有一个return语句,它只是隐含的,它返回None。尝试用'res = tree(n)替换'tree(n)';打印(res)'看我的意思。为什么你不能有一个明确的回报声明? –

回答

1

def tree(n):必须前第一次调用的代码的主体来它。只是重新安排:

def tree(n): 
    if(n>0): 
     tree(n-1) 
     print(n) 
     text.write(str(n)) 
     tree(n-1) 

n = input("Input a positive integer: ") 

text = open("Nummbers.txt", "w") 
text.write("Number inputed: " + str(n)) 
tree(n) 

当然,你现在有相反的问题,text没有定义在函数内部。您应该添加该参数作为参数,或者您可以重新排列并分割代码。

+1

函数引用尚未定义的全局变量实际上不是问题。只要该函数在变量存在后仅被调用*,它就可以正常工作。这并不是说将文件作为参数传递会很糟糕,但这并不是绝对必要的。你的代码在上面工作,没有更多的重新安排。 – Blckknght

+0

@Blckknght谢谢你的澄清。我必须承认我没有尝试过。 –