C 递归问题,麻烦大神进来看看

 void dfs(int step,int n)
{
    if(step<0)
        return;
    if(step==0 && n%2==0){
        count++;
        return;
    }       

    for(int i=1;i<=2;i++){
        step-=i;           //
        dfs(step,++n); //为什么这样写不对呢?正确的应该写为dfs(step-i,n+1);
    }   
}

step-=i;相当于step=step-i;
这里你更改了step的值

step-i
这里将结果作为实参并不改变step的值,所以结果当然不一样。

这个要看你的问题是什么,不知道问题是什么,没办法判断你的程序的对错。

 void dfs(int step,int n)
{
    if(step < 0)
    {
        return;
    }
    if((step == 0) && (n % 2 == 0))
    {
        //count++;
        return;
    }       

    for(int i=1;i<=2;i++)
    {
        step -= i;           //
        dfs(step,++n); //为什么这样写不对呢?正确的应该写为dfs(step-i,n+1);
    }   
}


int main()
{

    dfs(10,10);
}