阶乘 简单递归实现

#include <stdio.h>
int  fun(int n)
{
 int i = n;
 if(i==1)
 {
  return 1;
 }
 else{
  return i*fun(i-1);
 }
}
void main(void)
{

int n;

scnaf("%d\n",&n);//注意n的值不要过大 不然。。你懂滴
 printf("%d\n",fun(n));
}

/*

2013/7/20  22:03

在不用递归的时候尽量的不适用递归,因为再用递归的时候 每次都需要用到 f(n-1) 与 f(n-2)

也就是前面两项的值好比说  斐波那契数列的吧

f(4) = f(3) + f(2) .  f(3)是通过f(1)+f(2)  算出来的  但是右边加的那个f(2) 又是多进行的操作的出来的 即f(1) + f(0)  这样就相当于 f(2) 被计算了两次 

可以当数值越来越大时,计算的何止是两次呢 。

所以 递归也有递归的好处: 代码比较简单,容易理解嘛。但是带来的运算的开销也是非常庞大的,所以 尽量采用别的方法。

递归用到的地方 1、数学公式 函数 的递归定义

2、有些数据结构本身带有一定的递归性: 二叉树(树中树)  广义表 P109(严蔚敏 数据结构C语言版 Editor2)

3、还有书上写的  有些问题本身没有明显的递归结构,但是用递归求解比迭代求解更简单,如八皇后,汉诺塔 (个人理解  这里所谓的简单只不过是思路上理解的简单,但是其中的操作 步骤 算起来应该比迭代要多许多的。)

改天讨论下 迭代  递归 和 栈的操作  

其实 递归就是压栈出栈的一种表现  。

*/

原文地址:https://www.cnblogs.com/lobsterIT/p/2707881.html