להלן תוכנית C אשר ממשת את הפונקציה, ומחשבת אותה
עבור המספרים 1 עד MAX אשר עברה אופטימזיציות בשביל
שזמן החישוב יהיה O(N) במקרה הגרוע ביותר, ובפועל כאשר
קוראים לפונקציה לפי הסדר אז החישוב הוא O(1) #include <stdio.h> #define MAX 10000int vals[MAX]; int yos(int n) { if (vals[n]) return vals[n]; return (vals[n]=(yos(n-yos(n-1)) + yos(n-yos(n-2)))); } int main() { int i; memset(vals,0,sizeof(vals)); vals[1]=1; vals[2]=2; for (i=1;i<MAX;++i) { printf("%d: %d\n",yos(i),i); } return 0; }
|