zoukankan      html  css  js  c++  java
  • 递归原则

    转载自:http://blog.csdn.net/liu1064782986/article/details/7301551


    定义:一个函数用它自己来定义时就称为递归

    递归的四条基本法则:
    1.基准情形(base case):必须总要有某些基准的情形,它们不用递归就能进行求解
    2.不断推进(making progress):对于那些需要递归求解的情形,递归调用必须总能够朝着产生基准情形的方向推进
    3.设计法则(design rule):假设所有的递归调用都能运行
    4.合成效益法则(compound interest rule):在求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作

    例如,用递归计算斐波那契数就违反了第四条法则:

    1. Fib(int n)  
    2. {  
    3.     if(n<=1)  
    4.         return 1;  
    5.     else  
    6.         return Fib(n-1) + Fib(n-2);  //在不同递归中做了重复性的工作  
    7. }  


    非递归版本:

    1. long Fib(int n)  
    2. {  
    3.     if (n<2)  
    4.     {  
    5.         return 1;  
    6.     }  
    7.     else  
    8.     {  
    9.         long first = 1;  //F[n-2]  
    10.         long second = 1; //F[n-1]  
    11.         int i;  
    12.         for (i=1; i+2<=n; i+=2)  
    13.         {  
    14.             first += second;  
    15.             second += first;  
    16.         }  
    17.         if (i<n)  
    18.         {  
    19.             return second+first;  
    20.         }  
    21.         else  
    22.         {  
    23.             return second;  
    24.         }  
    25.     }  


  • 相关阅读:
    advanceInstaller安装文件的ICON
    advanceInstaller制作中文安装界面
    vc对话框程序运行时隐藏
    VC++6.0 打印调试信息
    js使用正则表达式实现文本框只能输入数字和小数点
    Flexbox制作CSS布局实现水平垂直居中
    微信js SDK接口
    QQ JS_SDk相关功能接口
    github代码管理工具的使用方法
    webpack打包压缩工具的使用方法
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020439.html
Copyright © 2011-2022 走看看