aboutsummaryrefslogtreecommitdiff
path: root/tests/etc/ack.rc
blob: b11bd3bea211af9b9429510ff32b9507f4dc8c6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/* This file is part of Mailfromd                                   -*- mfl -*-
   Copyright (C) 2006, 2007 Sergey Poznyakoff
 
   Mailfromd is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   Mailfromd is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with Mailfromd; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA */


/* This test computes the value of Ackerman function ack(3,8), which
   requires 2785999 calls of ack().  Maximum recursion depth is 2047,
   which requires 8188 words on stack.  Heap allocation for echo arguments
   requires extra 7 words. Extra 2 words are required for envfrom argument */

#pragma stacksize 8197

func ack(number, number) returns number
do
  if $1 = 0
    return $2+1
  fi
  if $2 = 0
    return ack($1-1,1)
  fi
  return ack($1-1, ack($1,$2-1))
done

prog envfrom
do
  echo "ack(3,8)=" ack(3,8)
done

/* End of ack.rc */

Return to:

Send suggestions and report system problems to the System administrator.