在递归中使用return

时间:2014-05-02 15:19:28

标签: c# recursion

public static int Mystery(int a,int b)
{
    if (b == 0)
        return 0;
    if (b % 2 == 0) 
    { 
        return Mystery(a + a, b / 2); 
    }
    else
    {
        return Mystery(a + a, b / 2) + a;
    }
}

大家好,请您告诉我使用返回神秘(a + a ...等)和使用Mystery(a + a)调用它之间的区别? 我一直在想的是,当我使用返回的东西时,它实际上创建了一个返回的方式返回并使用递归而不返回(ex.Mystery(a + a等...))仅在深度上没有实际留下任何回去的路。 谢谢!

1 个答案:

答案 0 :(得分:1)

如果您没有从递归调用中返回值,则无法累积所有调用的结果。例如,您正在进行Mystery(…) + a,因此如果Mystery没有在那里返回值,则会将a添加到任何内容(并且不会返回该值)。

当然你也可以先进行递归调用,保存该值并稍后返回:

int value = Mystery(a + a, b / 2);
// …
return value + a;

关键是每个递归调用都需要返回一个由父调用处理的值,以便您实际利用调用。

最后,您通常希望在return上进行递归调用,因为有些语言可以删除tail recursion。 C#doesn’t do that though