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

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	

你可能感兴趣的:(python算法实战,python,算法,数据结构)