zoukankan      html  css  js  c++  java
  • 递归函数

    递归给人的感觉总是很高大上,个人感觉再多的理论知识都不如一个完美的例子,不喜勿喷。

    网上看到一个题目:有一堆桃子,猴子每天吃一半后再多吃一个,到第5天时剩余一个桃子,求第一天的个数。

    前一天 = ( 后一天 + 1 ) * 2;  

    例如:第4天 = ( 第5天 + 1 ) * 2 = ( 1 + 1) * 2 = 4;

    代码如下:

     

    /************************************************************* 
    有一堆桃子,猴子每天吃一半后再多吃一个,到第5天时剩余一个桃子 
    *************************************************************/  
      
    #include <stdio.h>  
      
    int recursion(int day)  
    {  
        int total;  
      
        if (day == 5)  
        {  
            return 1;  
        }  
        else if (day < 5)  
        {  
            day++;  
            total = (recursion(day) + 1) * 2;  
            return total;  
        }  
    }  
      
    int main(void)  
    {  
        int i;  
      
        for (i=1;i<=5;i++)  
            printf("第%d天有%d个桃子
    ", i, recursion(i));  
      
        return 0;  
    }  

    运行结果:

    第1天有46个桃子
    第2天有22个桃子
    第3天有10个桃子
    第4天有4个桃子
    第5天有1个桃子
    请按任意键继续. . .


    下面开始逐步讲解高大上的递归:

     

    recursion(1)

    进入int recursion(int day)函数

    day = 1; day < 5; day++; day = 2; total = ( recursion(2) + 1 ) * 2;      //第1天桃子个数未知  
    day = 2; day < 5; day++; day = 3; total = ( recursion(3) + 1 ) * 2;      //第2天桃子个数未知  
    day = 3; day < 5; day++; day = 4; total = ( recursion(4) + 1 ) * 2;      //第3天桃子个数未知  
    day = 4; day < 5; day++; day = 5; total = ( recursion(5) + 1 ) * 2;      //第4天桃子个数未知  
    day = 5; day == 5; return 1;                                             //第5天桃子个数为1(已知)  
    recursion(5) = 1;  total = ( recursion(5) + 1 ) * 2 = 4;  return total ; //第4天桃子个数为4  
    recursion(4) = 4;  total = ( recursion(4) + 1 ) * 2 = 10; return total ; //第3天桃子个数为10  
    recursion(3) = 10; total = ( recursion(3) + 1 ) * 2 = 22; return total ; //第2天桃子个数为22  
    recursion(2) = 22; total = ( recursion(2) + 1 ) * 2 = 46; return total ; //第1天桃子个数为46
  • 相关阅读:
    Vue3 模板语法
    Vue 起步
    [原创]CPA、CPC、CPM、CVR、CTR和ROI分别代表什么?
    Redis 线程模型
    BIO和NIO区别以及原理
    kafka简介&kafka安装
    python测试开发django-109.ModelForm模型表单的使用
    HttpRunner2.X 版本和 3.X 版本的区别到底有哪些?(吐血总结!)
    python测试开发django-108.form组件Select下拉框读取数据库内容
    DDD领域驱动设计架构模式:防腐层(Anti-corruption layer)
  • 原文地址:https://www.cnblogs.com/lialong1st/p/7756663.html
Copyright © 2011-2022 走看看