Python使用递归

时间:2016-01-23 14:28:03

标签: python recursion

我必须使用递归函数制作一次表代码。我必须向用户询问一个数字并打印出1到12的时间表。我必须使用递归函数,不允许使用for循环或while循环和所有变量此外,必须在功能内定义用户输入。我无法定义用户提供的号码需要乘以的号码。 E.X. 2 x 1 2 x 2 2 x 3

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)

如果我在x函数中定义times_tables,那么每次函数运行时,它都将被设置回我第一次设置的任何值。谢谢你的帮助。

5 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的任务,但这是我的尝试:

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

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

答案 1 :(得分:0)

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

如果你想让退出条件保持在递归之外,你需要一种直接从递归写入X的方法,这可能涉及全局(不良做法,所以避免)。

你需要将退出条件放在里面,因为这将是你的递归,在这种情况下你的X会增加,你将检查适当的增量值。或者像ruggfrancesco建议的那样一起更改功能

答案 2 :(得分: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

答案 3 :(得分:0)

当我(图片)Google“时间表”时,我得到的结果与其他答案产生的结果截然不同。以下是我在二维维度中的递归解决方案:

def times_table(limit):
    number_format = "{{:{}}}".format(len(str(limit ** 2)))

    def times_table_recursive(number, increment):
        minimum = max(increment, 1)

        if number <= minimum * limit:
            print(number_format.format(number if number > 0 else 'x'), end=' ')
            times_table_recursive(number + minimum, increment)
        elif increment < limit:
            print()
            increment += 1
            print(number_format.format(increment), end=' ')
            times_table_recursive(increment, increment)
        else:
            print()

    times_table_recursive(0, 0)

times_table(12)

输出

> python3 test.py
x     1   2   3   4   5   6   7   8   9  10  11  12 
  1   1   2   3   4   5   6   7   8   9  10  11  12 
  2   2   4   6   8  10  12  14  16  18  20  22  24 
  3   3   6   9  12  15  18  21  24  27  30  33  36 
  4   4   8  12  16  20  24  28  32  36  40  44  48 
  5   5  10  15  20  25  30  35  40  45  50  55  60 
  6   6  12  18  24  30  36  42  48  54  60  66  72 
  7   7  14  21  28  35  42  49  56  63  70  77  84 
  8   8  16  24  32  40  48  56  64  72  80  88  96 
  9   9  18  27  36  45  54  63  72  81  90  99 108 
 10  10  20  30  40  50  60  70  80  90 100 110 120 
 11  11  22  33  44  55  66  77  88  99 110 121 132 
 12  12  24  36  48  60  72  84  96 108 120 132 144 
> 

在不扩展Python的递归深度限制的情况下,只能达到times_table(30)

答案 4 :(得分:-1)

def fun (no,i=1):
     if i==10:
          print (no*i)
     else:
          print (no*fun(i+1)
no=int (input ("Enter a no="))
fun (no)