zoukankan      html  css  js  c++  java
  • 阶乘 简单递归实现

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

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

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

    */

  • 相关阅读:
    Fibonacci Numbers
    Fibonacci(...刷的前几道题没有记博客的习惯,吃了大亏)
    Fibonacci Check-up
    Pendant
    奥运
    Tr A
    A Simple Game
    Be the Winner
    John
    Being a Good Boy in Spring Festival(尼姆博弈)
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/2707881.html
Copyright © 2011-2022 走看看