鱼C论坛

 找回密码
 立即注册
查看: 3621|回复: 1

[已解决]递归与迭代的正确打开方式,求解

[复制链接]
发表于 2022-10-25 10:22:16 | 显示全部楼层 |阅读模式
10鱼币
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]

已知a列表的长度14。
如何使用递归方法,生成长度为7的列表,且元素组合不同。。。例如 ((已知b列表长度为3。。b=[1,2,3])...生产长度为2的列表。。..新列表=[1,2],.,新列表[2,3]...新列表=[1,3]。只有3种组合了 )
如何使用迭代方法,生成长度为7的列表,且元素组合不同。。。例如 ((已知b列表长度为3。。b=[1,2,3])...生产长度为2的列表。。..新列表=[1,2],.,新列表[2,3]...新列表=[1,3]。只有3种组合了 )

两种方法,打印出生所有生产的列表。。。谢谢
最佳答案
2022-10-25 10:22:17
  1. a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  2. b = []
  3. i = 0
  4. #递归方法(dfs)
  5. def get(l, k):
  6.     global b
  7.     if l == 0:
  8.         print(b)
  9.     if len(b) > 0 and b[-1] == 14:
  10.         return
  11.     for i in range(k+1, len(a)):
  12.         b.append(a[i])
  13.         get(l-1, i)
  14.         b = b[:len(b)-1]
  15. get(7, -1)

  16. #迭代方法(暴力搜索)
  17. all_answer = []
  18. max_ = 2 ** 14 - 1
  19. for i in range(max_):
  20.     if ((i) % 2 +
  21.         (i >> 1) % 2 +
  22.         (i >> 2) % 2 +
  23.         (i >> 3) % 2 +
  24.         (i >> 4) % 2 +
  25.         (i >> 5) % 2 +
  26.         (i >> 6) % 2 +
  27.         (i >> 7) % 2 +
  28.         (i >> 8) % 2 +
  29.         (i >> 9) % 2 +
  30.         (i >> 10) % 2 +
  31.         (i >> 11) % 2 +
  32.         (i >> 12) % 2 +
  33.         (i >> 13) % 2) == 7:
  34.         all_answer.append([a[j] for j in range(14) if (i >> j) % 2])
  35. print(*list(sorted(all_answer)), sep = '\n')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-25 10:22:17 | 显示全部楼层    本楼为最佳答案   
  1. a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  2. b = []
  3. i = 0
  4. #递归方法(dfs)
  5. def get(l, k):
  6.     global b
  7.     if l == 0:
  8.         print(b)
  9.     if len(b) > 0 and b[-1] == 14:
  10.         return
  11.     for i in range(k+1, len(a)):
  12.         b.append(a[i])
  13.         get(l-1, i)
  14.         b = b[:len(b)-1]
  15. get(7, -1)

  16. #迭代方法(暴力搜索)
  17. all_answer = []
  18. max_ = 2 ** 14 - 1
  19. for i in range(max_):
  20.     if ((i) % 2 +
  21.         (i >> 1) % 2 +
  22.         (i >> 2) % 2 +
  23.         (i >> 3) % 2 +
  24.         (i >> 4) % 2 +
  25.         (i >> 5) % 2 +
  26.         (i >> 6) % 2 +
  27.         (i >> 7) % 2 +
  28.         (i >> 8) % 2 +
  29.         (i >> 9) % 2 +
  30.         (i >> 10) % 2 +
  31.         (i >> 11) % 2 +
  32.         (i >> 12) % 2 +
  33.         (i >> 13) % 2) == 7:
  34.         all_answer.append([a[j] for j in range(14) if (i >> j) % 2])
  35. print(*list(sorted(all_answer)), sep = '\n')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 05:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表