You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何匿名实现递归阶乘函数?仅用指定表达式与函数

匿名递归实现阶乘(符合CS61A作业限制)

题目要求

编写递归函数时,我们通常用def或赋值语句给函数命名,以便在函数体内引用自身。本题要求你无需命名,递归定义该函数!
编写表达式完成make_anonymous_factorial()函数,仅使用调用表达式、条件表达式和lambda表达式(禁止使用赋值或def语句)计算n的阶乘。特别注意返回表达式中不得使用make_anonymous_factorial,仅允许使用operator模块的sub和mul函数。
示例:

make_anonymous_factorial()(5)
120

你之前用reduce的解法不符合题目对工具的限制,以下是完全合规的实现:

合规代码

from operator import sub, mul

def make_anonymous_factorial():
    return (lambda f: lambda n: f(f, n))(
        lambda self, n: mul(n, self(self, sub(n, 1))) if n > 1 else 1
    )

实现思路

要实现匿名递归,关键是让函数能“拿到自己”——既然不能用函数名,那就把函数自身作为参数传递:

  • 外层的lambda f: lambda n: f(f, n)是个包装逻辑,它接收递归核心函数,返回一个能接收阶乘参数n的函数,同时把递归函数自己传给它;
  • 内层的lambda self, n: ...是阶乘的核心逻辑:
    • 当n大于1时,用mul计算n乘以n-1的阶乘,通过self(self, sub(n, 1))完成递归调用;
    • 当n≤1时,返回阶乘的基准值1;
  • 全程没有使用赋值语句、def定义额外函数,也只用到了题目允许的sub和mul,完全符合要求。

内容的提问来源于stack exchange,提问作者Deler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:54:19