python中的连乘_python中如何进行连乘计算

1、Python中连乘的代码:

sum = 1;

n = int(input("Please input number n:"))

for i in range(1,n+1):

sum = sum*i;

if i

print(i,end='')

print("*",end = '')

print(i,"=",sum)

2、运行结果

0383d1481c43ed783d36306dde9d1c42.png

实例扩展:

python 连乘 递归 参数可以是多个可迭代对象

from functools import reduce

a = (1, 2, 3, ['1','1'], [1, [2, [3, [4]]]])

def args_all_to_list(*args):

try:

data=list(*args)

return data

except:

data=list(args)

return data

def data_list(a):

data = []

f = 0

for x in a:

if type(x) is int:

data.append(x)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矩阵连乘问题就是给定一系列矩阵,求它们相乘的最少次数。这个问题可以使用动态规划来解决。 我们可以定义一个二维数组m[i][j]来表示矩阵Ai到Aj的最少次数,其i<=j。对于任意的i和j,m[i][j]的值可以通过以下递推式计算出来: m[i][j]=min{m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]},其i<=k<j,p[i-1]表示第i个矩阵的行数,p[j]表示第j个矩阵的列数。 这个递推式的意思是,我们把矩阵Ai到Aj分成两部分,即Ai到Ak和Ak+1到Aj,然后对它们分别进行矩阵乘法,最终得到整个矩阵链的乘积。我们需要遍历所有可能的k,选择乘积最小的那个。 最终的答案就是m[1][n-1],其n表示矩阵的个数。 下面是Python代码实现: ```python def matrix_chain_order(p): n = len(p) - 1 m = [[float('inf')] * n for _ in range(n)] s = [[0] * n for _ in range(n)] for i in range(n): m[i][i] = 0 for l in range(2, n + 1): for i in range(n - l + 1): j = i + l - 1 for k in range(i, j): q = m[i][k] + m[k+1][j] + p[i]*p[k+1]*p[j+1] if q < m[i][j]: m[i][j] = q s[i][j] = k return m, s def print_optimal_parens(s, i, j): if i == j: print("A{}".format(i), end="") else: print("(", end="") print_optimal_parens(s, i, s[i][j]) print_optimal_parens(s, s[i][j] + 1, j) print(")", end="") p = [30, 35, 15, 5, 10, 20, 25] m, s = matrix_chain_order(p) print(m[0][len(p)-2]) print_optimal_parens(s, 0, len(p)-2) ``` 这个代码的输出结果是: ```python 15125 ((A1(A2A3))((A4A5)A6)) ``` 其15125表示最少的矩阵乘法次数,((A1(A2A3))((A4A5)A6))表示矩阵相乘的最优顺序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值