C#递归回溯

一个简单的递归回溯小算法,原理和四皇后那个命题解法差不多
开始一个递归方法如果遇到特定条件则进行某些事,直到满足了指定条件,结束递归方法
条件需要在三把控否则容易进入无限递归卡死

List<int> _NumberRandom;

void NumberRandom(int prevNum)
    {
        if (_NumberRandom.Count >= 5)
        {
            Debug.LogWarning("递归回溯结束");
            return;
        }

        else if (10 - prevNum <= 5 - _NumberRandom.Count)
        {
            Debug.LogWarning("当前随机值无法进行下去,去除末尾继续递归");
            _NumberRandom.RemoveAt(_NumberRandom.Count - 1);
            NumberRandom(_NumberRandom[_NumberRandom.Count - 1]);
        }

        else
        {
            int tempNumber = prevNum + Random.Range(1, 4);
            Debug.LogWarning("正常随机,随机值:" + tempNumber);
            _NumberRandom.Add(tempNumber);

            if (tempNumber >= 10)
            {
                Debug.LogWarning("当前随机值已经超出最大范围,去掉末尾继续递归");
                _NumberRandom.RemoveAt(_NumberRandom.Count - 1);

                NumberRandom(_NumberRandom[_NumberRandom.Count - 1]);
            }
            else
            {
                NumberRandom(_NumberRandom[_NumberRandom.Count - 1]);
            }
        }
    }

这一段的作用是为了获取小于10(也可以改成作为参数传)且大于prevNum的5个顺序的不重复随机
且每下一个数字是上一个数字的加1~3(随机)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值