diff test/fact.c @ 0:d35df41eac69

Initial revision
author kono
date Thu, 13 Jan 2000 02:41:41 +0900
parents
children e2c2c0fe0785
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fact.c	Thu Jan 13 02:41:41 2000 +0900
@@ -0,0 +1,39 @@
+#include "stdio.h"
+
+int
+main(ac,av)
+int ac;
+char *av[];
+{
+    int n;
+    n = atoi(av[1]);
+    goto factorial(n,1,n,print,return,environment);
+}
+
+code print(n,result,orig,print,exit1,exit1env)
+int n,result,orig;
+code (*print)(),(*exit1)();
+void *exit1env;
+{
+    printf("%d! = %d\n",n, result);
+    goto (*exit1)(1),exit1env;
+}
+
+code factorial(n,result,orig,print,exit1,exit1env)
+int n,result,orig;
+code (*print)();
+code (*exit1)();
+void *exit1env;
+{
+    if (n<0) {
+	printf("err %d!\n",n);
+	goto (*exit1)(0),exit1env;
+    }
+    if (n==0)
+	goto (*print)(n,result,orig,print,exit1,exit1env);
+    else {
+	result *= n;
+	n--;
+	goto factorial(n,result,orig,print,exit1,exit1env);
+    }
+}