【发布时间】:2014-08-31 21:45:05
【问题描述】:
我想练习递归和装饰器并尝试做这个简单的功能,但它不起作用:
def dec(func):
def wrapper(number):
print("Recursive count:")
rec_cou(number)
return wrapper
@dec
def rec_cou(number):
""" Count from 0 to a given number from 50 and up """
if number == 0:
print(number)
return number
num = rec_cou(number - 1)
print(num + 1)
return num + 1
rec_cou(53)
单独的递归函数效果很好,但是当我添加装饰器时会产生错误:超出最大递归深度
【问题讨论】:
-
....出于好奇,你为什么在这里使用装饰器?
-
@KyleStrand 只想在每次调用 rec_cou 时只打印一次文本“递归计数:”。我现在知道如何在装饰器中创建一个新属性。但是最好知道一个更简单的方法。
-
我会说装饰器根本不是正确的语言结构。只需在递归函数中移动“第一次”标志即可。
-
我不明白你的第一次标志是什么意思。
-
这是指示函数是否第一次被调用的标志(即在递归下降之前)。在乔尔的回答中,它是成员
wrapper.initial。
标签: python function recursion decorator