• 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    第4行:	1*4=4	2*4=8	3*4=12	4*4=16	
    
    • 1
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    第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	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这样的问题是在一开始多了一个空行,如果要坚持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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    第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	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    docker 搭建本地Chat GPT
    golang中使用泛型
    Arrays.asList() 和 new ArrayList() 的区别(详解)
    【etcd】编译与安装
    C++虚函数
    React Native自学笔记
    网站优化之favicon.ico
    iNeuOS工业互联网操作系统,在航天和军工测控领域的应用
    期货开户中常见问题汇总
    京东获得店铺的所有商品 API
  • 原文地址:https://blog.csdn.net/niexinyu0026/article/details/128087603