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.     }  


  • 相关阅读:
    保护模式下通过写显存在屏幕上输出字符串
    Linux0.01 引导代码分析-head.s
    OpenGL Super Bible 第四章 Transform 程序绘图部分代码解析
    Ubuntu10.04 下编译 OpenOffice DEV300 分支
    今天把博客开通了,欢迎来访!
    沟通的工具ER图
    为什么博客叫秋水?
    mysql.基础笔记
    如何阅读别人的C代码
    Github搜索与查看
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020439.html
Copyright © 2011-2022 走看看