26.递归

//递归
/*
	递归指的是在函数的定义中使用函数自身的方法。
	C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件
	否则会进入死循环。
	递归函数在解决许多数学问题上起了至关重要的作用,比如计算一个数的阶乘、生成斐波那契数列,等等。
*/

//数的阶乘
#include <stdio.h>
 
double factorial(unsigned int i)
{
   if(i <= 1)
   {
      return 1;
   }
   return i * factorial(i - 1);
}
int  main01()
{
    int i = 15;
    printf("%d 的阶乘为 %f\n", i, factorial(i)); //15 的阶乘为 1307674368000.000000
    return 0;
}


//斐波那契数列
int fibonaci(int i)
{
   if(i == 0)
   {
      return 0;
   }
   if(i == 1)
   {
      return 1;
   }
   return fibonaci(i-1) + fibonaci(i-2);
}
 
int  main()
{
    int i;
    for (i = 0; i < 10; i++)
    {
       printf("%d\t\n", fibonaci(i));
    }
    return 0;
	/*
		0
		1
		1
		2
		3
		5
		8
		13
		21
		34
	*/
}

//笔记
/*
	递归是一个简洁的概念,同时也是一种很有用的手段。但是,使用递归是要付出代价的。
	与直接的语句(如while循环)相比,递归函数会耗费更多的运行时间,并且要占用大量的栈空间
	递归函数每次调用自身时,都需要把它的状态存到栈中,以便在它调用完自身后,程序可以返回到它原来的状态
	未经精心设计的递归函数总是会带来麻烦。
	
	采用递归方法来解决问题,必须符合以下三个条件:
	1、可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,
		只是所处理的对象有规律地递增或递减
	2、可以应用这个转化过程使问题得到解决。
	3、必定要有一个明确的结束递归的条件。
*/

  

猜你喜欢

转载自www.cnblogs.com/traditional/p/9499008.html