鱼C论坛

 找回密码
 立即注册
查看: 2049|回复: 6

[已解决]如何把这段代码变成递归形式

[复制链接]
发表于 2017-3-25 20:43:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. num=[]
  2. for i in range(0,11):
  3.     for ii in range(0,7):
  4.         for iii in range(0,4):
  5.             num.append([i,ii,iii])
  6. print(num)
复制代码
最佳答案
2017-4-19 08:17:14
这题真要写递归,应该这么写,不过没什么意思,而且不推荐,还是循环比较简单而且高效。
  1. num = []

  2. def rec(i=0, ii=0, iii=0):
  3.     global num
  4.     if i == 11:
  5.         return
  6.     num.append([i, ii, iii])
  7.     next_iii = (iii + 1) % 4
  8.     next_ii = (ii + (iii + 1) // 4) % 7
  9.     next_i = i + (ii + (iii + 1) // 4) // 7
  10.     rec(next_i, next_ii, next_iii)

  11. rec()
  12. print num
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-3-25 22:20:45 | 显示全部楼层
  1. num = []
  2. def a():
  3.     for i in range(0,11):
  4.         for ii in range(0,7):
  5.             for iii in range(0,4):
  6.                 num.append([i,ii,iii])
  7.                     print(num)

复制代码


表示不会...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 00:13:03 From FishC Mobile | 显示全部楼层
能用循环写的尽量不要用递归,递归效率低不说,还要考虑边界条件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 00:30:14 | 显示全部楼层
别净整些没用的
你觉得用递归解决问题显得牛逼么
代码的实用性和安全性才是重点
你的代码可以改成这样
  1. num = []
  2. for i,ii,iii in zip(range(11),range(7),range(4)):
  3.     num.append([i,ii,iii])
  4. print(num)
复制代码

不好意思,我并不懂什么叫递归
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 01:36:18 | 显示全部楼层
def myRecur(num1, num2, num3):
    num1_list = range(num1)
    num2_list = range(num2)
    num3_list = range(num3)
    result = []

    def _Recyr():
        if not num1_list:
            return result
        else:
            a = num1_list.pop(0)
            for b in num2_list:
                subList = []
                for c in num3_list:
                    subList.append(a)
                    subList.append(b)
                    subList.append(c)
                    result.append(subList)
                    subList = []
            _Recyr()


    _Recyr()
    return result


if __name__ == '__main__':
    a = myRecur(11,7,4)
    print(len(a))
    print(a)

#############
只能写个这个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 02:58:16 | 显示全部楼层
这里用递归并不好使。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 08:17:14 | 显示全部楼层    本楼为最佳答案   
这题真要写递归,应该这么写,不过没什么意思,而且不推荐,还是循环比较简单而且高效。
  1. num = []

  2. def rec(i=0, ii=0, iii=0):
  3.     global num
  4.     if i == 11:
  5.         return
  6.     num.append([i, ii, iii])
  7.     next_iii = (iii + 1) % 4
  8.     next_ii = (ii + (iii + 1) // 4) % 7
  9.     next_i = i + (ii + (iii + 1) // 4) // 7
  10.     rec(next_i, next_ii, next_iii)

  11. rec()
  12. print num
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-26 09:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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