递归循环中的值

发布于 2024-10-15 00:51:38 字数 193 浏览 2 评论 0原文

在递归循环中,我想更改变量的值:

loop(N) when N > ... ->
N;
loop(N) ->
case ... of
  N+1
  ...
end,
...
case ... of
  N-1
  ...
end,
...
loop(N).

如何“传递” N 的新值?

In a recursive loop, I would like to change the value of a variable:

loop(N) when N > ... ->
N;
loop(N) ->
case ... of
  N+1
  ...
end,
...
case ... of
  N-1
  ...
end,
...
loop(N).

How to "pass" the new value of N ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红ご颜醉 2024-10-22 00:51:38

由于 N 的值一旦分配就无法更改,因此需要使用新值调用 loop

loop(N) ->
    loop(N+1).

或者,在传递之前创建一个临时变量来保存其新值它进入递归循环调用。

loop(N) ->
    NewN = N+1,
    loop(NewN).

如果这会导致代码中出现大量重复,您可能需要将循环构造与生成 N 新值的逻辑分开:

loop(N) ->
    NewN = logic(N),
    loop(NewN).

logic(N) ->
    N+1.

Since you can't change the value of N once assigned, you need to call loop with the new value:

loop(N) ->
    loop(N+1).

Alternatively, create a temporary variable to hold its new value before passing it into the recursive loop invocation.

loop(N) ->
    NewN = N+1,
    loop(NewN).

If this results in a lot of repetition in your code, you might want to separate the looping construct from the logic which produces the new value of N:

loop(N) ->
    NewN = logic(N),
    loop(NewN).

logic(N) ->
    N+1.
雾里花 2024-10-22 00:51:38

您只需使用新值调用该函数即可:

$ cat fac.erl
-module(fac).
-export([fac/1]).

fac(0) -> 1;
fac(N) when N > 0 -> N*fac(N-1).

$ erl
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:8:8] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
1> c(fac).
{ok,fac}
2> fac:fac(10).
3628800
3> q().
ok
4> $

无耻地窃取自: http://learnyousomeerlang.com/recursion#hello -递归

You simply call the function with a new value:

$ cat fac.erl
-module(fac).
-export([fac/1]).

fac(0) -> 1;
fac(N) when N > 0 -> N*fac(N-1).

$ erl
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:8:8] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
1> c(fac).
{ok,fac}
2> fac:fac(10).
3628800
3> q().
ok
4> $

Shamelessly stolen from: http://learnyousomeerlang.com/recursion#hello-recursion

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文