嗨,我有一个任务要用一个lambda打印一个pascal tringle。我遇到的问题是,我不能使用任何变量,也不能使用递归lambda。我需要以以下方式提交我的答案:
lambda x : <code>
因为答案是以这种方式提交的,所以我不能使用任何变量,也不能使用递归
而tringle需要如下所示:
3: [[1], [1, 1], [1, 2, 1]]
因此,因为我不能使用任何变量,所以我搜索了一种方法,在没有其他行的情况下打印tringle
我发现你可以用下面的方法计算一个帕斯卡弦:
1: 0nCr0
2: 1nCr0, 1nCr1
3: 2nCr0, 2nCr1, 2nCr2
所以我试着用它来解决我的任务,我做到了:
lambda x : ( [([(int)( ( __import__("math").factorial(i) ) / (__import__("math").factorial(j) * ( __import__("math").factorial(i - j) ) ) ) for j in range(i + 1)]) for i in range(x)] )
唯一的问题是,如果不使用数学库,我无法使用导入,也不知道如何在lambda中使用阶乘
您可以手动构建阶乘函数,然后将其与lambda一起使用:
def阶乘(n): 如果(n==0或n==1): 返回1 其他: 返回n*阶乘(n-1)
我不知道没有Y组合器怎么做
您将不得不执行以下操作:
然后使用Y combinator将递归函数转换为lambda。F(n)返回三角形的第n行,使用每个元素是其上两个元素的和这一事实
如果你不喜欢打两次F(n-1),那么
使用可以使用lambda创建临时变量的事实。您仍然需要使用Y组合符来消除该函数
由于您的部分解决方案使用了
i
和j
,我不知道“不能使用任何变量”是什么意思,除非您指的是全局变量,在这种情况下,我提交:输出
相关问题 更多 >
编程相关推荐