我试图用setjmp()
和longjmp()
,以使c
语言像fibonacci
生成序列(即使用yield关键字实现在python
):错误
#include <setjmp.h>
#include <stdio.h>
jmp_buf mainTask, childTask;
void child(void);
int main(void) {
long i = 1;
if (!setjmp(mainTask)) {
printf("%ldth Parent\n", i++);
child();
}
for (int j = 0;j < 9;j++) {
printf("%ldth Parent\n", i++);
if (!setjmp(mainTask)) {
longjmp(childTask, 1);
}
}
}
void child (void) {
int c = 0;
long i = 1;
long j = 1;
long k = 0;
for (;;) {
printf("i is:%ld j is:%ld\n", i, j);
k = i + j;
if(i <= j)
i = k;
else
j = k;
c++;
printf("%dth fib number:%ld\n", c, k);
if (!setjmp(childTask)) longjmp(mainTask, 1);
}
}
它只适用于第一个数字。
*更新: 我预计2,3,5,8,13,... 但它产生2,和的nextS是不正确的(15digits不正确的数字)
你能否用实际以及预期的输出来编辑你的问题? –
我真的希望你这样做只是为了实验。因为没有一个理智的程序员会为了生产代码而创建像这样的意大利面代码。 –
你的想法是正确的。我想挑战自己 – arianpress