如何在不使用if/else/switch/循环的情况下实现1到n的Fizzbuzz程序
无循环、无条件判断的递归FizzBuzz实现
基于你提供的单个数字无if/else的FizzBuzz代码,我们可以利用递归和Python的短路求值、字符串特性来实现1到n范围的功能,完全符合要求:
def fizzbuzz(n): # 利用短路求值实现递归终止(无需if) n > 0 and fizzbuzz(n - 1) # 生成当前数字的输出内容:fizz/buzz/数字本身 output = "fizz" * (n % 3 == 0) + "buzz" * (n % 5 == 0) or str(n) print(output, end=" ") # 测试示例 fizzbuzz(6)
代码说明:
- 递归终止逻辑:
n > 0 and fizzbuzz(n - 1)利用了逻辑与的短路特性——当n > 0为假时,后面的递归调用不会执行,自然终止递归。 - 单个数字输出:
"fizz" * (n % 3 == 0):当n能被3整除时,条件为True(等价于1),字符串相乘后得到"fizz";否则条件为False(等价于0),得到空串。- 同理
"buzz" * (n % 5 == 0)处理被5整除的情况。 - 两者相加后,如果结果是空串(即
n既不被3也不被5整除),or会返回后面的str(n),实现输出数字本身的需求。
- 调用
fizzbuzz(6)会输出:1 2 fizz 4 buzz fizz(若需去除末尾空格,可在递归结束后额外处理,核心功能已满足要求)
内容的提问来源于stack exchange,提问作者Average_C_Enjoyer
相关产品推荐
相关产品推荐

