# HG changeset patch # User Nobuyasu Oshiro # Date 1338745553 -32400 # Node ID 774d70d1ea62917074df8b5ded3d2499a56635e3 # Parent bdf15605852912e6d368bf7adb23d025af710f19 add fibonacci diff -r bdf156058529 -r 774d70d1ea62 fibonacci/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fibonacci/Makefile Mon Jun 04 02:45:53 2012 +0900 @@ -0,0 +1,15 @@ +CC=gcc +CbCC=cbc-gcc-4.6 + +CFLAGS=-O3 + +PROGRAM= cbc_fibonacci2 c_fibonacci2 + +all: $(PROGRAM) + +cbc_fibonnacci2: fibonacci2.cbc + $(CbCC) $(CFLAGS) -o $@ $^ +c_fibonacci2: fibonacci2.c + $(CC) $(CFLAGS) -o $@ $^ +clean: + rm -rf *.{o,s} $(PROGRAM) \ No newline at end of file diff -r bdf156058529 -r 774d70d1ea62 fibonacci/fibonacci2.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fibonacci/fibonacci2.c Mon Jun 04 02:45:53 2012 +0900 @@ -0,0 +1,37 @@ +#include +#include + +long unsigned int fibonacci(long unsigned int num, long unsigned int count, long unsigned int result, long unsigned int prev) { + if (count == 0) { + result += 0; + count++; + } else if (count == 1) { + result += 1; + count++; + } else if (count > 1) { + long unsigned int tmp = prev; + prev = result; + result = result + tmp; + count++; + } else { + printf("please enter nutural number\n"); + exit(0); + } + if (num < count) + return result; + return fibonacci(num, count, result, prev); + +} + + +int main(int argc, char* argv[]) { + long unsigned int num = (long unsigned int)atoi(argv[1]); +// long unsigned int result = fibonacci(num, 0, 0, 0); + long unsigned int i; + for (i=0; i <= num; i++) { + long unsigned int result = fibonacci(i, 0, 0, 0); + printf("fibonacci(%ld) = %ld\n",i,result); + } + + return 0; +} diff -r bdf156058529 -r 774d70d1ea62 fibonacci/fibonacci2.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fibonacci/fibonacci2.cbc Mon Jun 04 02:45:53 2012 +0900 @@ -0,0 +1,52 @@ +#include +#include + +__code print(__rectype *p, int num, int count, int result, int prev) { + printf("fibonacci(%d) = %d\n",num,result); + + goto cs_while(print, num, count, result, prev); + +// exit(0); +} + +__code fibonacci(__rectype *p, int num, int count, int result, int prev) { + if (count == 0) { + result += 0; + count++; + } else if (count == 1) { + result += 1; + count++; + } else if (count > 1){ + int tmp = prev; + prev = result; + result = result + tmp; + count++; + } else { + printf("please enter nutural number\n"); + exit(0); + } + if (num < count) + goto p(fibonacci, num, count, result, prev); + goto fibonacci(p, num, count, result, prev); + +} + +__code cs_while(__rectype *p, int num, int count, int result, int prev) { + if (num > 0) { + num--; + goto fibonacci(print, num, 0, 0, 0); + } + exit(0); +} + + +int main(int argc, char* argv[]) { + if (argc < 2) { + printf("usage: ./fibonacci number \n"); + exit(0); + } + int num = atoi(argv[1]); + goto fibonacci(print, num, 0, 0, 0); + + return 0; +} diff -r bdf156058529 -r 774d70d1ea62 fibonacci/fibonacci2_.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fibonacci/fibonacci2_.cbc Mon Jun 04 02:45:53 2012 +0900 @@ -0,0 +1,43 @@ +#include +#include + +__code print(__rectype *p, int num, int count, int result, int prev) { + printf("fibonacci(%d) = %d\n",num,result); + exit(0); +} + +__code fibonacci(__rectype *p, int num, int count, int result, int prev) { + if (count == 0) { + result += 0; + count++; + } else if (count == 1) { + result += 1; + count++; + } else if (count > 1){ + int tmp = prev; + prev = result; + result = result + tmp; + count++; + } else { + printf("please enter nutural number\n"); + exit(0); + } + if (num < count) + goto p(fibonacci, num, count, result, prev); + goto fibonacci(p, num, count, result, prev); + +} + + + + +int main(int argc, char* argv[]) { + if (argc < 2) { + printf("usage: ./fibonacci number \n"); + exit(0); + } + int num = atoi(argv[1]); + goto fibonacci(print, num, 0, 0, 0); + + return 0; +}