我正在尝试为了有趣的目的而做一个“1-liner”,由于某些原因我不能使代码正常工作。注意:这是C,而不是C ++,但问题仍然存在。
“展开”版本:
#include <stdio.h>
#include <math.h>
int main() {
double iter = 1;
double res = 0;
double elem = 0;
double fib_c = 1;
double fib_p = 1;
double power = 4;
double fact = 1;
while (iter < 15) {
fib_c += fib_p; //fibonacci current
fib_p = fib_c - fib_p; //fibonacci previous
fact *= iter; //factorial
power *= 4; //power of 4
elem = (fib_c * power * sqrt(iter+1)) / fact; //element of series
res += elem; //series
printf("----\nelem = %2.3f\nres = %2.3f\n", elem, res);
iter++;
}
return 0;
}
这是一个系列(我不知道英语中的数学术语),elem
从45上升到1264,然后又下降到47.
这是我正在努力工作的“包装”版本:
#include <stdio.h>
#include <math.h>
int main() {
double iter = 1;
double res = 0;
double elem = 0;
double fib_c = 1;
double fib_p = 1;
double power = 4;
double fact = 1;
while (iter < 15) {
res += (elem = (fib_c += ((fib_p = fib_c - fib_p)) * (power*=4) * sqrt(iter+1)) / (fact*=iter));
printf("----\nelem = %2.3f\nres = %2.3f\n", elem, res);
iter++;
}
return 0;
}
这里elem
ent在小于5次迭代中超出整数。显然,有些事情是错的。但是什么?
顺便说一句,如果我每次迭代打印出每个值(fib_c
,power
,fact
),我会看到正确的值(当前的斐波纳契数,4的幂,正在进行的因子,相应)。所以我猜测“在幕后”发生了一些奇怪的事情,我不知道如何管理它。
有什么想法吗?
答案 0 :(得分:1)
(fib_c += ((fib_p = fib_c - fib_p))
与
不同fib_c += fib_p; //fibonacci current
fib_p = fib_c - fib_p; //fibonacci previous
与
相同fib_p = fib_c - fib_p; //fibonacci previous
fib_c += fib_p; //fibonacci current