josephus问题递归求解,函数返回值问题,返回值为none?

josephus问题递归求解,函数返回值问题

def josephus(args,number):#传入列表和数字
    tidailiebiao=[i for i in args]#为了多次调用,使用替代列表
    print(tidailiebiao)
    if(len(tidailiebiao)<number):#递归结束条件
        #print(tidailiebiao)
                #print(len(tidailiebiao))
        return tidailiebiao#返回值
    else:
        delete_people=tidailiebiao.pop(number-1)#删除元素
        print("remove:%d"%delete_people)
        tidailiebiao=tidailiebiao[number-1:]+tidailiebiao[:number-1]#生成新列表
        josephus(tidailiebiao,number)#递归
test=[i for i in range(1,42)]
print(test)
print(josephus(test,3))#测试

图片说明
最后的返回值为none
尝试解决方案,将函数的返回值重新复制给一个新列表,返回新列表,不能解决问题
在函数中加入代码测试发现,当达到返回条件时,返回值不为空
求帮助,多谢各位了

1个回答

图片说明
加个 return就行了

def josephus(args, number):  # 传入列表和数字
    tidailiebiao = args  # 为了多次调用,使用替代列表
    print(tidailiebiao)
    if len(tidailiebiao) < number:   # 递归结束条件
        return tidailiebiao     # 返回值
    else:
        delete_people = tidailiebiao.pop(number-1)  # 删除元素
        print("remove:%d" % delete_people)
        tidailiebiao = tidailiebiao[number-1:]+tidailiebiao[:number-1]    # 生成新列表
        return josephus(tidailiebiao, number)   # 递归


test = [i for i in range(1, 42)]
print(test)
print(josephus(test, 3))        # 测试
qq_34451642
moriartys123 谢谢~
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问