【发布时间】:2016-06-21 20:25:47
【问题描述】:
我是 C 的新手,正在玩弄它。所以我最终实现了斐波那契代码(迭代和递归)。我写了一个测试函数,它应该给我一个绿色(我的实现工作)或红色。它说我得到了正确的返回值,但它的状态是红色的。这两个值都应该是 unsigned long。我正在使用 make 在 OSX 上编译
#include <stdio.h>
unsigned long fibonacci(unsigned long n);
void test_fibonacci(unsigned long n, unsigned long assertion);
int main(int argc, char* argv[])
{
test_fibonacci(1, 1);
test_fibonacci(2, 1);
test_fibonacci(3, 2);
test_fibonacci(10, 55);
return 0;
}
unsigned long fibonacci(unsigned long n)
{
unsigned long result = 1;
unsigned long lastResult;
for (unsigned long i = 2; i <= n; i++)
{
// save the current result to save it as the lastResult after this iteration
unsigned long lastResultTmp = result;
result = lastResult + result;
lastResult = lastResultTmp;
}
return result;
}
void test_fibonacci(unsigned long n, unsigned long assertion)
{
printf(
"fibonacci(%lu): %lu | %s | asserted: %lu\n",
n,
fibonacci(n),
(fibonacci(n) == assertion) ? "green" : "red",
assertion
);
}
我的 Makefile
CFLAGS=-Wall -g
all: main
clean:
rm -f main
rm -Rf *.dSYM
输出:
fibonacci(1): 1 | green | asserted: 1
fibonacci(2): 1 | red | asserted: 1
fibonacci(3): 2 | red | asserted: 2
fibonacci(10): 55 | red | asserted: 55
【问题讨论】:
标签: c comparison long-integer unsigned