python---杨辉三角的多种方法

2、杨辉三角

其数据如图5-3所示,杨辉三角第n行的数字有n项,每行数字左右对称,由1开始逐渐变大,每个数等于它上方两数之和。试用递归函数方法打印出n行的杨辉三角图形。

n=1 n=2 n=3 n=4  n=5 n=6 n=7

  1. 代码:

def y(n, k):

    if k == 0 or k == n:

        return 1

    return y(n - 1, k - 1) + y(n - 1, k)

def triangle(n):

    for i in range(n):

        for j in range(i + 1):

            print(y(i, j), end=" ")

        print()

n = 7

triangle(n)

  1. 结果:
  2. 分析:

定义个y储存行列,

if k == 0 or k == n:

    return 1

使每一行的第一个和最后一个为1

return y(n - 1, k - 1) + y(n - 1, k)

计算上一行两数和

def triangle(n):

    for i in range(n):

        for j in range(i + 1):

            print(y(i, j), end=" ")

        print()

第一个for控制行,嵌套for循环控制列,end=””,为空格,print()为换行

递归

代码:

def y(n, k):

    if k == 0 or k == n:

        return 1

    return y(n - 1, k - 1) + y(n - 1, k)

def triangle(n):

    for i in range(n):

        for j in range(i + 1):

            print(y(i, j), end=" ")

        print()

n = 10

triangle(n)

2.截图:

3.分析:

代码中的y(n, k)函数用于计算杨辉三角中第n行第k个位置的值,而triangle(n)函数则用于打印出前n行的杨辉三角。递归的基础情况是当k为0或k等于n时,返回1。对于其他情况,函数返回y(n - 1, k - 1)和y(n - 1, k)的和,即上一行相邻两个位置的值之和。外层循环i用于控制行数,内层循环j用于控制每行的列数。内层循环中,调用y(i, j)函数来计算并打印当前位置的值,然后用end=" "来确保每个值后面都有一个空格当内层循环结束后,使用print()函数来确保每行结束后有一个换行。

5.装饰器

1.代码:

import time

def decorator(func):

    def wrapper(*args,**kwargs):

        start_time=time.time()

        re=func(*args,**kwargs)

        end_time=time.time()

        timer=end_time-start_time

        print("run time spend:",timer,'s',sep="")

        return re

    return wrapper

@decorator

def run_func(a,b):

    time.sleep(0.1)

    return a**b

a=int(input("input x: ").strip(''))

b=int(input("input y: ").strip(''))

print("%d**%d=%d"%(a,b,run_func(a,b)))

2.截图:

3.分析:

首先引入time库

位置参数*args和关键字参数**kwargs,调用原函数func,并将*args和**kwargs传递给它。

装饰器 decorator 接受一个函数 func 作为参数,并返回一个新的函数 wrapper。

@decorator 是一个装饰器的语法糖,它等价于 run_func = decorator(run_func)。run_func 函数实际上被替换为 wrapper 函数(在装饰器内部定义)。当你调用 run_func(a, b) 时,你实际上是在调用 wrapper(a, b)

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值