题目来自“计蒜客”第4题。
解算法题之前,务必先写出与之对应的数学表达式,用于描述算法。
数学描述如图:
根据“数学描述“,写出代码如下:
#include <stdio.h> int main() { int N =0 ; scanf("%d", &N); int i, fn1 = 1, fn2 = 0, fn; switch(N) { case 0: printf("0"); break; case 1: printf("1"); break; default: for(i = 2; i <= N; i++ ) { fn = fn1 + fn2; fn2 = fn1; fn1 = fn; } printf("%d", fn); } return 0; }
愉快的完毕。
反思,该算法的时间复杂度为O(N),即算法的执行时间取决于数列的项数。如果能推到出“第N项斐波那契数公式“,直接带入公式,那么时间复杂度将进化到O(1)。