我有一个简单的Go for循环,我想学习如何在Elixir中使用Recursion。我现在还不知道递归循环是如何工作的,但我正在研究这个部分!我也不知道这是否是做递归函数的正确方法。
package main
import "fmt"
func main() {
for i := 0; i < 10000000; i++ {
fmt.Println(i)
}
}
defmodule Looping do
def loops(i, e) when e <= 0 do
IO.puts i + e
end
def loops(i, e) do
IO.puts i + e
loops(i, e + 1)
end
end
Looping.loops(1, 1)
进入Elixir时产生1 + 1 + 1。
Martin在初学者松弛频道建议以下内容。
1..1_000_000 |> Enum.each(&IO.puts/1)
答案 0 :(得分:2)
在Iex中忽略主要内容并运行elixir代码我得到一个无限升序系列开始
1
2
3
4
这表明当你到达10000000而不是零时你可能打算停止 - 从而整理你的代码:
defmodule Looping do
def loops(e) when e == 10000000 do
IO.puts e
end
def loops(e) do
IO.puts e
loops(e + 1)
end
end
Looping.loops(0)
答案 1 :(得分:2)
我不确定你要找的是什么,但是在Elixir中使用递归模拟for循环看起来像这样:
def my_func(param1, 5), do: param1
def my_func(param1, count) do
my_func param1 * 2, count + 1
end
你可以调用这样的函数来运行从1到5的循环:
my_func(input_for_param1, 1)
我认为您的问题是您仍然不了解递归是什么以及Elixir(和函数式编程语言)如何工作。尝试首先掌握这些概念(包括模式匹配),一切都会变得更加容易。
执行for循环的另一种方法是通过元编程为它创建一个构造。
答案 2 :(得分:0)
这里有很多简单的递归示例:http://elixir-lang.org/getting-started/recursion.html这也解释了递归和遍历列表。你具体追求什么?看看那些,如果你很难搞清楚,请告诉我。
答案 3 :(得分:0)
在您的情况下使用范围&amp;一个简单的理解可以很好地工作,但如果你想特别使用递归,你可以做类似
的事情defmodule SomeName do
def addr(range), do: addr(Enum.to_list(range), 0)
def addr([first|rest], sum), do: addr(rest, sum + first)
def addr([], sum), do: sum
end
如果你想打印每一行你可以在addr / 2中抛出一个IO.inspect / 1来打印出这样的总和
def addr([first|rest], sum) do
IO.inspect(sum)
addr(rest, sum + first)
end