#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、还有书上写的 有些问题本身没有明显的递归结构,但是用递归求解比迭代求解更简单,如八皇后,汉诺塔 (个人理解 这里所谓的简单只不过是思路上理解的简单,但是其中的操作 步骤 算起来应该比迭代要多许多的。)
改天讨论下 迭代 递归 和 栈的操作
其实 递归就是压栈出栈的一种表现 。
*/