Mutual recursion: Difference between revisions
Content added Content deleted
No edit summary |
(Add Seed7 example) |
||
Line 1,492: | Line 1,492: | ||
The <code>letrec</code> indicates that the definitions can be recursive, and fact that we placed these two in the same <code>letrec</code> block makes them mutually recursive. |
The <code>letrec</code> indicates that the definitions can be recursive, and fact that we placed these two in the same <code>letrec</code> block makes them mutually recursive. |
||
=={{header|Seed7}}== |
|||
<lang seed7>$ include "seed7_05.s7i"; |
|||
const func integer: m (in integer: n) is forward; |
|||
const func integer: f (in integer: n) is func |
|||
result |
|||
var integer: res is 0; |
|||
begin |
|||
if n = 0 then |
|||
res := 1; |
|||
else |
|||
res := n - m(f(n - 1)); |
|||
end if; |
|||
end func; |
|||
const func integer: m (in integer: n) is func |
|||
result |
|||
var integer: res is 0; |
|||
begin |
|||
if n = 0 then |
|||
res := 0; |
|||
else |
|||
res := n - f(m(n - 1)); |
|||
end if; |
|||
end func; |
|||
const proc: main is func |
|||
local |
|||
var integer: i is 0; |
|||
begin |
|||
for i range 0 to 19 do |
|||
write(f(i) lpad 3); |
|||
end for; |
|||
writeln; |
|||
for i range 0 to 19 do |
|||
write(m(i) lpad 3); |
|||
end for; |
|||
writeln; |
|||
end func;</lang> |
|||
Output: |
|||
<pre> |
|||
1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 10 11 11 12 |
|||
0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12 |
|||
</pre> |
|||
=={{header|Smalltalk}}== |
=={{header|Smalltalk}}== |