Sudan function: Difference between revisions
Content added Content deleted
(Added XPL0 example.) |
Catskill549 (talk | contribs) (added AWK) |
||
Line 109: | Line 109: | ||
F(3, 1, 1) = 10228 |
F(3, 1, 1) = 10228 |
||
F(2, 2, 1) = 27 |
F(2, 2, 1) = 27 |
||
</pre> |
|||
=={{header|AWK}}== |
|||
<lang AWK> |
|||
# syntax: GAWK -f SUDAN_FUNCTION.AWK |
|||
BEGIN { |
|||
for (n=0; n<=1; n++) { |
|||
printf("sudan(%d,x,y)\n",n) |
|||
printf("y/x 0 1 2 3 4 5\n") |
|||
printf("%s\n",strdup("-",28)) |
|||
for (y=0; y<=6; y++) { |
|||
printf("%2d | ",y) |
|||
for (x=0; x<=5; x++) { |
|||
printf("%3d ",sudan(n,x,y)) |
|||
} |
|||
printf("\n") |
|||
} |
|||
printf("\n") |
|||
} |
|||
n=1; x=3; y=3; printf("sudan(%d,%d,%d)=%d\n",n,x,y,sudan(n,x,y)) |
|||
n=2; x=1; y=1; printf("sudan(%d,%d,%d)=%d\n",n,x,y,sudan(n,x,y)) |
|||
n=2; x=2; y=1; printf("sudan(%d,%d,%d)=%d\n",n,x,y,sudan(n,x,y)) |
|||
n=3; x=1; y=1; printf("sudan(%d,%d,%d)=%d\n",n,x,y,sudan(n,x,y)) |
|||
exit(0) |
|||
} |
|||
function sudan(n,x,y) { |
|||
if (n == 0) { return(x+y) } |
|||
if (y == 0) { return(x) } |
|||
return sudan(n-1, sudan(n,x,y-1), sudan(n,x,y-1)+y) |
|||
} |
|||
function strdup(str,n, i,new_str) { |
|||
for (i=1; i<=n; i++) { |
|||
new_str = new_str str |
|||
} |
|||
return(new_str) |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
sudan(0,x,y) |
|||
y/x 0 1 2 3 4 5 |
|||
---------------------------- |
|||
0 | 0 1 2 3 4 5 |
|||
1 | 1 2 3 4 5 6 |
|||
2 | 2 3 4 5 6 7 |
|||
3 | 3 4 5 6 7 8 |
|||
4 | 4 5 6 7 8 9 |
|||
5 | 5 6 7 8 9 10 |
|||
6 | 6 7 8 9 10 11 |
|||
sudan(1,x,y) |
|||
y/x 0 1 2 3 4 5 |
|||
---------------------------- |
|||
0 | 0 1 2 3 4 5 |
|||
1 | 1 3 5 7 9 11 |
|||
2 | 4 8 12 16 20 24 |
|||
3 | 11 19 27 35 43 51 |
|||
4 | 26 42 58 74 90 106 |
|||
5 | 57 89 121 153 185 217 |
|||
6 | 120 184 248 312 376 440 |
|||
sudan(1,3,3)=35 |
|||
sudan(2,1,1)=8 |
|||
sudan(2,2,1)=27 |
|||
sudan(3,1,1)=10228 |
|||
</pre> |
</pre> |
||