zoukankan      html  css  js  c++  java
  • C和C指针小记(十一)-递归和迭代优化

    1、递归

    C通过运行时堆栈支持递归函数的实现.
    递归函数就是直接或间接调用自身的函数.
    一个小例子:

    /**
     使用递归将整型转换为ascii字符
    
     @param value 整型数
     */
    void binary2ascii(unsigned int value) {
        unsigned int quotient;
        quotient = value / 10;
        if (quotient != 0) {
            binary2ascii(quotient);
        }
        putchar(value % 10 + '0');
    }
    
    

    2、两个递归运用和用迭代优化的例子

    尾递归:递归调用出现在函数的尾部,并且之后不再执行任何任务
    尾递归可以方便的转换为迭代.由于递归是非常耗费内存的(每次函数调用都会在内存中分配空间),内存频繁的分配回收严重影响程序的执行效率.

    
    /**
     递归计算阶乘
    
     @param n 整数n
     @return 阶乘
     */
    long factorial(unsigned int n){
        if (n <= 0) {
            return 1;
        }else{
            return n * factorial(n - 1);
        }
    }
    
    
    /**
     迭代计算阶乘
    
     @param n 整数n
     @return 阶乘
     */
    long factorial_iteria(int n){
        int result = 1;
        while (n > 1) {
            result *= n;
            n -= 1;
        }
        return result;
    }
    
    
    
    /**
     递归计算斐波那契数
     效率非常低:计算fibonacci(10)时,fibonacci(3)重复计算了21次,计算fibonacci(30)时,fibonacci(3)计算了317811次
     @param n 整数n
     @return n的斐波那契数
     */
    long fibonacci(int n){
        if (n <= 2) {
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
    
    
    /**
     迭代求斐波那契数列
     
     @param n 整数n
     @return n的斐波那契数
     */
    long fibonacci_iteral(int n){
        long result;
        long previous_result;
        long next_older_result;
        result = previous_result = 1;
        while (n > 2) {
            n -= 1;
            next_older_result = previous_result;
            previous_result = result;
            result = previous_result + next_older_result;
        }
        return result;
    }
    
    
    
  • 相关阅读:
    typora永久插入图片
    Cortex-M 处理器 hardfault 定位方法和步骤(基于Keil mdk)
    STM32之CAN ---CAN ID过滤器分析
    记一次payload绕过电脑管家免杀
    kali linux 静态地址和动态地址的设置
    mona
    武装你的浏览器--自用的火狐插件推荐
    kali linux开启ssh
    记一次腾讯云服务器centos linux可视化桌面安装并进行远程桌面登录及其安装中文包
    widows终端远程连接Linux服务器
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/10408125.html
Copyright © 2011-2022 走看看