2016-01-23 58 views
3

我必须使用递归函数来生成时间表代码。我必须要求用户输入一个数字并打印1到12的时间表。我必须使用递归函数,并且不允许使用for循环或while循环,并且除用户输入之外的所有变量都必须定义在功能里面。我无法定义用户提供的号码需要乘以的号码。 E.X. 2 x 2 x 2 x 。Python时间表递归代码

def times_tables(num): 
    def multiply(x): 
     product = x * num 
    if x < 12: 
     print (str(multiply(x + 1))) 

user = input("Enter a number: ") 
times_tables(user) 

如果我在times_tables功能,那么每一个函数运行它会被设回无论我将它设置为第一次的时间定义x。谢谢你的帮助。

+0

如果我记得递归很好,我认为你必须设置条件。从基本案例开始。简单步骤。然后进行下一步(第2个最简单的步骤)参考最简单步骤的结果。然后从那里出发。 – yftse

+0

你从不修改x,你没有从multiply(x)返回任何东西, – AlokThakur

回答

0

我不知道如果我理解你的任务,但这里是我的尝试:

def timetable(n, time=1): 
    if time <= 12: 
     print(n, time, n*time) 
     timetable(n, time+1) 
    else: 
     return 

timetable(int(input('Number: '))) 
0

你没有修改X,X是按值传递,这意味着它被复制。

如果您希望在递归之外保持退出条件,您需要一种直接从递归编写X的方法,这可能涉及到全局(所以请避免使用不良做法)。

您需要将退出条件乘以内,因为这将是您的递归,在这种情况下,您的X将增加,并且您将检查正确递增的值。或者像ruggfrancesco建议的那样一起改变功能

0
def times_tables(n, t=1): 
    if t == 13: 
     return 
    print(str(n) + " x " + str(t) + " = " + str(n*t)) 
    times_tables(n, t+1) 

times_tables(int(input("Enter number: "))) 

Enter number: 3 
3 x 1 = 3 
3 x 2 = 6 
3 x 3 = 9 
3 x 4 = 12 
3 x 5 = 15 
3 x 6 = 18 
3 x 7 = 21 
3 x 8 = 24 
3 x 9 = 27 
3 x 10 = 30 
3 x 11 = 33 
3 x 12 = 36