Python算法图解——递归(三):打印九九乘法表

本系列内容来自何韬编著的《Python算法图解》

递归:程序调用自身的编程技巧。
它通常把一个大型复杂的问题,层层转换为一个与原问题相似的规模较小的问题来求解。
在某些情况下,它能解决 for 循环难以解决的算法问题,有时只需少量的代码就可描述出解题过程所需要的多次重复计算,大大减少了代码量。

在程序实现中,递归往往以调用的方式存在。
递归调用:声明一个方法,并在这个方法中设定条件,在此条件下调用自身方法,也就是在方法中自己调用自己,如果不符合条件则停止调用。

九九乘法表:
第1行:1×1=1
第2行:1×2=2 2×2=4
……

开始实现:

def F(n):  # 首先不嵌套
    print("第{}行:".format(n), end="\t")
    for i in range(1, n+1):
        print("{}*{}={}".format(i, n, i*n), end="\t")

F(4)
第4行:    1*4=4    2*4=8    3*4=12    4*4=16
def multi(n):  # 考虑嵌套
    if n >= 1:
        multi(n-1)
        print()  # 表示换行,这里如果写print("\n"),反而会每两行之间都有空行
        print("第{}行:".format(n), end="\t")
        for i in range(1, n+1):
            print("{}*{}={}".format(i, n, i*n), end="\t")
multi(9)
第1行:    1*1=1    
第2行:    1*2=2    2*2=4    
第3行:    1*3=3    2*3=6    3*3=9    
第4行:    1*4=4    2*4=8    3*4=12    4*4=16    
第5行:    1*5=5    2*5=10    3*5=15    4*5=20    5*5=25    
第6行:    1*6=6    2*6=12    3*6=18    4*6=24    5*6=30    6*6=36    
第7行:    1*7=7    2*7=14    3*7=21    4*7=28    5*7=35    6*7=42    7*7=49    
第8行:    1*8=8    2*8=16    3*8=24    4*8=32    5*8=40    6*8=48    7*8=56    8*8=64    
第9行:    1*9=9    2*9=18    3*9=27    4*9=36    5*9=45    6*9=54    7*9=63    8*9=72    9*9=81

这样的问题是在一开始多了一个空行,如果要坚持multi(9),就得对n=1的情况分类讨论,所以下面干脆用输入multi(1)来算:

def multi(n):  # 考虑嵌套
    if n <= 9:
        print("第{}行:".format(n), end="\t")
        for i in range(1, n+1):
            print("{}*{}={}".format(i, n, i*n), end="\t")
        print()
        multi(n+1)  # 如果这一步在if循环外,则会一直走向multi(∞),只是没有进入if循环打印而已,因此会报错
multi(1)
第1行:    1*1=1    
第2行:    1*2=2    2*2=4    
第3行:    1*3=3    2*3=6    3*3=9    
第4行:    1*4=4    2*4=8    3*4=12    4*4=16    
第5行:    1*5=5    2*5=10    3*5=15    4*5=20    5*5=25    
第6行:    1*6=6    2*6=12    3*6=18    4*6=24    5*6=30    6*6=36    
第7行:    1*7=7    2*7=14    3*7=21    4*7=28    5*7=35    6*7=42    7*7=49    
第8行:    1*8=8    2*8=16    3*8=24    4*8=32    5*8=40    6*8=48    7*8=56    8*8=64    
第9行:    1*9=9    2*9=18    3*9=27    4*9=36    5*9=45    6*9=54    7*9=63    8*9=72    9*9=81