天天看點

函數入門2

#define _CRT_SECURE_NO_WARNINGS 1


////函數遞歸
// 
////按順序列印每一位輸入的數
//#include<stdio.h>
//
//void print(int n)
//{
//  if (n > 9)
//  {
//    print(n / 10);
//  }
//  printf("%d ", n % 10);
//}
//
//int main()
//{
//  unsigned int num = 0;
//  scanf("%d", &num);
//  print(num);
//  return 0;
//}



////模拟實作一個strlen函數
//#include<stdio.h>
//
//int my_strlen(char* arr)
//{
//  if (*arr != '\0')
//    return 1 + my_strlen(arr + 1);
//  else
//    return 0;
//}
//
//int main()
//{
//  char arr[] = "china";
//  int len = my_strlen(arr);
//  printf("len=%d\n", len);
//  return 0;
//}



////求n的階乘
//#include<stdio.h>
//
//int fac1(int n)//循環的方式
//{
//  int i = 0;
//  int ret = 1;
//  for (i = 1; 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;
//}



////求第n個斐波那契數
//#include<stdio.h>
//
//int fib1(int n)//用遞歸的方式會重複計算多次
//{
//  if (n <= 2)
//    return 1;
//  else
//    return fib1(n - 1) + fib1(n - 2);
//}
//
//int fib2(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 = fib2(n);
//  printf("ret=%d\n", ret);
//  return 0;
//}