• 阶乘 简单递归实现


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

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

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

    */

  • 相关阅读:
    返回一个整数数组中最大子数组的和
    软件工程概论第五周学习进度
    软件工程概论第四周学习进度
    软件工程个人作业03
    软件工程概论第三周学习进度
    软件工程个人作业02
    软件工程概论学习进度第二周
    寻找水王
    第七周学习进度
    二维数组最大值
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/2707881.html
Copyright © 2020-2023  润新知