斐波那契数列,0.618的增长率,很神奇的黄金分割率。多学习算法吧,一个简单的算法想不起来的话会被鄙视,尽管这其实微不足道。。
//为了防止溢出,使用long double 类型。
//直接用公式算,最快。
long double numbers (int n) {
long double result = 0.0;
result = (powl((sqrtl(5.0)+1)/2, n)-powl((1-sqrtl(5.0))/2, n))/sqrtl(5.0);
return result;
}
//迭代,方法简单,但最费时
long double fib(int n)
{
if (n==0) {
return 0.0;
}
if(n==1){
return 1.0;
}
return fib(n-1)+fib(n-2);
}
//常规方法,但比迭代省时间的多。
long double fibonacci(int n){
if (n==1) {
return 0.0;
}
if (n==2) {
return 1.0;
}
long double a[n];
a[0]=0.0;
a[1]=1.0;
for (int i=2; i<n; i++) {
a[i]=a[i-1]+a[i-2];
}
return a[n-1];
}
int main(int argc, char * argv[]) {
@autoreleasepool {
for (int i = 0; i<1000; i++) {
// printf("numbers%d: %0.Lf \n", i+1, numbers(i));
// printf("%d pow : %0.Lf \n", i, powl(i, i));
// printf("%d fib : %0.Lf \n", i+1, fib(i));
printf("%d fib : %0.Lf \n", i+1, fibonacci(i+1));
}
// printf("result %0.Lf \n", powl(2.0, 40.0));
// long double result = sqrtl(25.0);
// long double result2 = powl(2.0, 3.0);
// NSLog(@"%Lf %Lf", result, result2);
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}