天天看點

函數與遞歸

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//在使用 fib 這個函數的時候如果我們要計算第50個斐波那契數字的時候特别耗費時間
//使用 fac 函數求10000的階乘(不考慮結果的正确性),程式會崩潰
//int fib(int n)
//{
//    int result;
//    int pre_result;
//    int next_older_result;
//    result = pre_result = 1;
//    while (n > 2)
//    {
//        n -= 1;
//        next_older_result = pre_result;
//        pre_result = result;
//        result = pre_result + next_older_result;
//    }
//    return result;
//}

////int fib(int n)
////{
////    if (n <= 2)
////        return 1;
////    else
////        return fib(n - 1) + fib(n - 2);
////}
int fib(int n)
{
    int a = 1;
    int b = 1;
    int c = 1;
    while (n > 2)
    {
        c = a + b;
        a = b;
        b = c;
        n--;
    }
    return c;
}
int main()
{
    int n = 0;
    int ret = 0;
    scanf("%d ", &n);
    ret=fib(n);
    printf("%d\n", ret);
    return 0;
}//int Fac1(int n)
//{
//  int i = 0;
//  int ret = 1;
//  for (i = 0; i <= n; i++)
//  {
//      ret *= i;
//
//  }
//  return ret;
//}
//int Fac2(int n)
//{
//  if (n <= 1)
//      return 1;
//  else
//      return n * Fac2(n - 1);
//}
//
//int main()
//{
//  int n = 0;
//  int ret = 0;
//  scanf("%d ", &n);
//  ret=Fac2(n);
//  printf("%d\n", ret);
//  return 0;
//}
//void print(int n)
//{
//  if (n > 9)
//  {
//     print(n / 10);
//  }
//  printf("%d ", n % 10);
//}
//int main()
//{
//  unsigned num = 0;
//  scanf("%d",&num);
//  //遞歸
//  print(num);
//  //printf("呵呵\n");
//  //main();
//  ////printf("%d", 32);
//  return 0;
//}