[英]How to take list of numbers from a recursive function and return it as a list?
I made a recursive function that gives me a certain number if it's odd or even.我做了一个递归 function 如果它是奇数或偶数,它会给我一个特定的数字。 So, if I call the function with a
5
, it'll output 5, 16, 8, 4, 2, 1
.所以,如果我用
5
调用 function ,它将是 output 5, 16, 8, 4, 2, 1
。 How do I have the output return this sequence of numbers as a list?如何让 output 将此数字序列作为列表返回? So,
[5, 16, 8, 4, 2, 1]
.所以,
[5, 16, 8, 4, 2, 1]
。
This is my code:这是我的代码:
def recursion_list(number):
ls = []
print(number)
if number == 1:
return 1
if number % 2 == 0:
first = recursion_list(number // 2)
return first
elif number % 2 == 1:
second = recursion_list(3 * number + 1)
return second
There are two ways to do this.有两种方法可以做到这一点。
First, return a variable of list type and receive the return value and appending it.首先,返回一个列表类型的变量并接收返回值并附加它。 But this method has a large overhead
但是这种方法开销很大
Second, make variable ls to global variable of list type and instead of returning a value, attach it to the ls variable.其次,将变量 ls 设置为列表类型的全局变量,而不是返回值,而是将其附加到 ls 变量。
Try to return a list of the printed variables and recursively append them.尝试返回打印变量的列表并递归 append 它们。
def recursion_list(number):
ls = [number]
print(number)
if number == 1:
return ls
if number % 2 == 0:
ls += recursion_list(number // 2)
return ls
elif number % 2 == 1:
ls += recursion_list(3 * number + 1)
return ls
print(recursion_list(5))
output output
5
16
8
4
2
1
[5, 16, 8, 4, 2, 1]
def recursion_list(number):
ls = [number]
if number == 1:
return ls
elif number % 2 == 0:
return ls + recursion_list(number // 2)
elif number % 2 == 1:
return ls + recursion_list(3 * number + 1)
The task can be done by defining a list globally.该任务可以通过全局定义一个列表来完成。
ls = []
def recursion_list(number):
ls.append(number)
if number == 1:
return ls
if number % 2 == 0:
first = recursion_list(number // 2)
return first
elif number % 2 == 1:
second = recursion_list(3 * number + 1)
return second
print(recursion_list(5))
You could convert you recursive function into a generator and make a list of the output only when needed.您可以将递归 function 转换为生成器,并仅在需要时列出 output。
def recursion_gen(number):
yield number
if number == 1: return
if number % 2 == 0:
for n in recursion_gen(number // 2):
yield n
else:
for n in recursion_gen(3 * number + 1):
yield n
print(*recursion_gen(5)) # 5 16 8 4 2 1
ls = list(recursion_gen(5))
print(ls) # [5, 16, 8, 4, 2, 1]
To return a list directly, you don't need an intermediate variable:要直接返回列表,您不需要中间变量:
def recursion_list(number):
if number == 1:
return [number]
if number % 2 == 0:
return [number] + recursion_list(number // 2)
else:
return [number] + recursion_list(3 * number + 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.