C递归经典实例

  1

菲波那切数列:求第N个数列的值

# include  & lt; stdio.h>   long  long  Fib (int , n) {   ,,,return  (n ==, 1, | |, n ==, 2), ?, 1,:, Fib (n 安康;1),+,Fib (n 安康;2);   }      int  main () {   ,printf (" % ld \ n”, Fib (40));   }
 C: \ MinGW \ project> gcc 化c99  C
  
  C: \ MinGW \ project> a.exe
  102334155 





递归求出年龄:

每一个人比前面一个人大2岁,最前面那个人是10岁,求第n个人的年龄

# include  & lt; stdio.h>   int 递归(int  n) {   ,,,int 我;   如果(n==1),我=10;   else ,,,, i=递归(n - 1) + 2;   return 我;   }      int  main () {   printf ("=age  % d”,递归(20);   }
 # include  & lt; stdio.h>
  long  num=0;
  void 河内(int  n, char  char  B, char  C){//理解为:有n个盘子在上,通过B,移到C
  如果(n==1)
  printf("第% ld步:\ t % c →, % c \ n”, + + num, A, c);
  其他{
  河内(n - 1 A, C, B),,
  printf("第% ld步:\ t % c →, % c \ n”, + + num, A, c),,
  河内(n - 1, B, C);
  }
  }
  
  int  main () {
  int  n=0;
  printf(“请输入盘子的个数\ n”);
  scanf (“% d”,和n);
  printf("盘子的移动方向如下\ n”);
  ,,,河内(n,‘“,“B”,“C”),,
  }
 chunli@ubuntu:美元/tmp, cat  sum.c 
  # include  & lt; stdio.h>
  
  int 和(int  n)
  {
  if  (n ==1)
  return  1;
  其他的
  return  n  +,总和(n - 1);
  
  }
  
  
  
  
  int  main ()
  {
  
  printf (" sum =% d  \ n”,总和(10),);
  
  }
  chunli@ubuntu:美元/tmp, gcc  sum.c ;。/a.out 
  sum  55=



求1到n之间质数的和

# include  & lt; stdio.h>      int  isprime (int  n, int 键)//判断n是否为素数,是返回1,不是返回0   {   if  (n  & lt;, 2)   return  0;   if  (n ==,键)   return  1;   if  (n  %, key ==, 0)   return  0;//除了1和他本身以外,有余数,证明不是素数,返回假   其他的   return  isprime (n, key  +, 1);   }      int 和(int  n)//求1到n之间所有素数之和   {   if  (n ==, 1)   return  1;   其他的   {   if  (isprime (n, 2))   return , n  +,总和(n 作用;1);//如果n为素数,递归求和   其他的   return 和(n 作用;1);//如果n不为素数,只递归,不求和   }   }      int  main ()   {   printf(" 1,,, 2,质数和,% d  \ n”,和(2));   printf(" 1,,, 3,质数和,% d  \ n”,和(3));   printf(" 1, -, 10质数和,% d  \ n”, sum (10));   }                     chunli@ubuntu:/tmp,美元。/a.out    1,,,2,质数和,3,   1,,,3,质数和,6,   1,,,10质数和,18

C递归经典实例