summaryrefslogtreecommitdiff
path: root/out.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2019-10-21 11:09:07 -0400
committerLeo Tenenbaum <pommicket@gmail.com>2019-10-21 11:09:07 -0400
commit9d1960f4cd0e1a78abfecce4d5bfa4d850955852 (patch)
tree89622e6011aee006e017537d2251be21f8d71f37 /out.c
parent965d5dee1fe6cd28ad92d7f5007c90b6d7d2ff58 (diff)
compile time recursion
Diffstat (limited to 'out.c')
-rw-r--r--out.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/out.c b/out.c
index 249b3e0..ba1a23a 100644
--- a/out.c
+++ b/out.c
@@ -18,7 +18,7 @@ typedef struct { void *data; u64 n; } slice_;
/* declarations */
void puti(i64 x);
-i64 foo(i64 x);
+i64 factorial(i64 x);
void main__(void);
/* code */
int main() {
@@ -34,31 +34,21 @@ void puti(i64 x) {
}
-i64 foo(i64 x) {
+i64 factorial(i64 x) {
- slice_ C; {
- slice_ expr__; slice_ a0_; a0_.data = calloc(x, sizeof(i64)); a0_.n = x;expr__ = a0_;C = expr__;}
- i64 i; {
- i64 expr__; expr__ = 0;i = expr__;}
- while ((i<x)) {
- (((i64(*))(C.data))[i]) = i;;
- i = (i+1);;
- };
- i64 total; {
- i64 expr__; expr__ = 0;total = expr__;}
- i = 0;;
- while ((i<x)) {
- total = (total+(((i64(*))(C.data))[i]));;
- i = (i+1);;
- };
- return total;
+ i64 a0_;
+ if ((x==0)) {
+ a0_ = 1;
+ } else {
+ a0_ = (x*(factorial((x-1))));
+ }return a0_;
}
void main__(void) {
- i64( A[45]) = {0};
- i64( B[4950]) = {0};
+ i64( a342[120]) = {0};
+ (puti((factorial(20))));
}