חידת פייתון ו C
09/11/2020
דני תוכניתני חשב שיוכל לחשב מספרי פיבונאצ'י הרבה יותר מהר אם יעביר את פונקציית החישוב מ Python ל C. הפונקציה ב Python נראתה כך:
def fib(n):
x, y = 0, 1
for i in range(n):
x, y = y, x + y
return y
ודני שכבר יודע דבר או שניים על חיבור פייתון ל C הלך ותירגם את הקוד ל C באופן הבא:
static PyObject *
spam_fib(PyObject *self, PyObject *args)
{
int n;
if (!PyArg_ParseTuple(args, "i", &n))
return NULL;
unsigned long x = 0, y = 1;
unsigned long temp;
for (int i=0; i < n; i++) {
temp = x;
x = y;
y = temp + x;
}
return PyLong_FromUnsignedLong(y);
}
אחרי קומפילציה ובדיקה קצרה של הקוד הבא:
import spam
print(spam.fib(5))
דני שמח, דחף את הקוד, העלה גירסה והמשיך לפנק את עצמו בכוס קפה. המים עוד לא הספיקו לרתוח כשהטלפונים התחילו להגיע...
מה דני שבר?