C#中两个static函数互相递归调用时,递归结果不正确的问题

程序大致结构如下,

namespace AkariPuzzle
{
     class Program
    {
       static void Main(string[] args)
        {
        //puzzle是自定义的一个AkariPuzzle类,包含一个List
        //nodes相当于一个固定的List,对问题无影响 
        BackTrack(puzzle,nodes,0);
         }
         //回溯法填灯,从 深度0开始
         static bool BackTrack(AkariPuzzle puzzle, List<PuzzlePoint> nodes, int deep)
        {
            //一条路径找完之后
            if (deep == nodes.Count)
            {
                Solutions.Add(puzzle);
                return true;
            }

            bool correct = true;

            int i = nodes[deep].x;
            int j = nodes[deep].y;
            //找到空余的位置 
            List<PuzzlePoint> plist = RoomPutBulbs(puzzle, i, j);
            List<string> comb = C(plist,puzzle.Array[i][j]);
            //选择一种组合进行分支
            foreach (var c in comb)
            {
                //分支
                correct = Branch(puzzle, plist, c, nodes, deep) || correct;
                //递归回来时发现,puzzle并不是递归之前的现场的值,而是被改变的值
            }

            return correct;
        }

        //分支
         static bool Branch(AkariPuzzle puzzle, List<PuzzlePoint> plist, string c, List<PuzzlePoint> nodes, int deep)
        {
            bool correct = true;
            //修改puzzle中List的某些值
            puzzle.change();        

            //继续寻找下一个点
            correct = BackTrack(puzzle, nodes,++deep);

            return correct;
        }
    }
}

问题是这样,假设在BackTrack函数中第一次调用Branch前,puzzle.list里的值为1,在branch函数中修改puzzle.list为0,此时假设递归终止,返回递归点时,puzzle.list应当为1才对,但是调试的时候发现值不为1。不清楚问题出在哪里,求指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值