学习递归笔记

一、概念

函数体内调用本函数自身,直到符合某一条件不可继续调用。

二、应满足的条件

(1).有反复执行的过程(调用自身)。

(2).有跳出反复执行过程的条件(函数出口)。

三、注意事项

1.递归中必须要存在一个循环结束的条件。

2.递归函数的每次调用都需要栈来存储,如果次数太多的话容易造成栈溢出。

例:每一天卖掉二分之一只又一只羊,经过7天后剩下2只羊,问最初几只羊

public int ganyang(int day)                  //试着写了另一种方法 sum=ganyang(day-1)/2-1; 第几个村子的羊等于上一个村子的羊除以2减去1
        {                                    //一直没写成功,都是死循环。想到递归的调用顺序可能是,已知的初值如果在后面,那就由后往前推
            int sum = 0;                     //如果已知的初值在前面,就由前往后推
            if (day == 7)
            {
                sum = 2;
                return sum;
            }
            sum = (ganyang(day + 1) + 1) * 2;//当天的羊等于下一天的羊加1然后乘以2 假如输入参数day=6 当执行到这一步时,会继续调用函数ganyang(day+1) 这时day就变成7了,满足                                               if条件,sum=2,然后继续执行公式~~ 
            return sum;
        }
        static void Main(string[] args)
        {
            int sum = new Program().ganyang(0);
            Console.WriteLine(sum);
            Console.ReadLine();
        }
    }
}



        /// <summary>
        /// 求总共多少对兔子。两只幼兔,一个月后长成成兔并生下一对幼兔,问多少个月后有多少对兔子
        /// </summary>
        /// <param name="m">多少个月数</param>
        /// <returns>兔子的总对数</returns>
        public int tuzi(int m)//输入参数m为第几个月
        {
            int s;
            if (m==0)            //第0个月,也就是刚开始是一对幼兔
            {
                s = 1;
                return s;//这边一定记得也加个return 不然m==0时的s值送不出去,下面的公式无法获得s的值
            }
            s = tuzi(m-1) * 2;//找规律,本月的兔子总和是(上月成兔+上月幼兔)*2, 本函数求的就是某月兔子的总对数,所以上月兔子的总对数就是tuzi(m-1)
            return s;//把计算结果输出函数
        }


        static void Main(string[] args)
        {
            int sum = new Program().tuzi(4);
            Console.WriteLine(sum);
            Console.ReadLine();
        }
 
  

 

 

 

转载于:https://www.cnblogs.com/happinesshappy/p/4425873.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值