Arrays Ruby中使用递归循环时追加数组
我正在用Ruby进行工作,并在n=1时停止。 这是我目前掌握的代码:Arrays Ruby中使用递归循环时追加数组,arrays,ruby,recursion,Arrays,Ruby,Recursion,我正在用Ruby进行工作,并在n=1时停止。 这是我目前掌握的代码: def collatz(n) arr = [] if n == 1 arr << n return arr elsif n % 2 == 0 n = n / 2 arr << n collatz(n) else n = (3 * n) + 1 arr << n collatz(n) end end def
def collatz(n)
arr = []
if n == 1
arr << n
return arr
elsif n % 2 == 0
n = n / 2
arr << n
collatz(n)
else
n = (3 * n) + 1
arr << n
collatz(n)
end
end
def collatz(n)
arr=[]
如果n==1
arr将数组添加到参数,例如:
def collatz(arr, n)
if n == 1
arr << n
return arr
elsif n % 2 == 0
n = n / 2
arr << n
collatz(arr, n)
else
n = (3 * n) + 1
arr << n
collatz(arr, n)
end
end
puts "#{collatz([], 10).join(', ')}"
但请记住:递归是一种邪恶
在递归中:
def collatz(n)
arr = []
loop do
n = n % 2 == 0 ? n / 2 : (3 * n) + 1
arr << n
break if n == 1
end
arr
end
puts "#{collatz(10).join(', ')}"
def collatz(n)
arr=[]
环道
n=n%2==0?n/2:(3*n)+1
arr您可以使用此代码
如果n是1,则像Array
一样返回它。
如果n%2==0,则使用n/2,否则使用(3*n)+1。
如果n现在是1,则像Array
一样返回它,否则用n值定义新的Array
,并用新的n调用自己
def collatz(n)
return [n] if n == 1
n = n % 2 == 0 ? n / 2 : (3 * n) + 1
n == 1 ? [n] : [n] + send(__method__, n)
end
输出
p collatz(10)
# => [5, 16, 8, 4, 2, 1]
我希望这有助于为什么递归是邪恶的?递归是邪恶的,因为它限制了您的能力,并限制了最大的调用堆栈限制。它(调用堆栈限制)取决于您的语言和计算机,但它不是无限的。
p collatz(10)
# => [5, 16, 8, 4, 2, 1]