递归在 C# 中的这个小问题中是如何工作的?

问题描述

所以我正在使用递归到计算机能力查看这段简短的代码,如果我给它一个 Riase_2(2,4) 的值,它将返回 16,这是正确的。但是我对我们如何达到 exp==0 感到困惑它返回 16 而不仅仅是 1?还有 abase * Raise_2(abase,exp-1) 的工作原理是什么 abase ebing 时间是多少? 希望有人能帮我解决这个问题,谢谢。

static int Raise_2(int abase,int exp)
{
    Console.WriteLine($"Loops 2 : {abase} {exp}");
    int outerLoop = 0;
    if (exp == 0)
    {
        return 1;
    }
    else
    {
        outerLoop++;
        return abase * Raise_2(abase,exp - 1);
    }
}

解决方法

如果您使用 Raise(2,4) 运行,计算过程如下:

2 * Raise(2,3)
==
2 * 2 * Raise(2,2)
==
2 * 2 * 2 * Raise(2,1)
==
2 * 2 * 2 * 2 * Raise(2,0)
==
2 * 2 * 2 * 2 * 1 = 16

也许您可以通过调试器更好地理解这一点。

,

我们想检查 object NestedGraph { val id = MainGraph.id_counter++ object Destinations { val nestedFirstFragment = MainGraph.id_counter++ val nestedSecondFragment = MainGraph.id_counter++ } object Actions { val to_nestedSecondFragment = MainGraph.id_counter++ } fun addDestinations(navController: NavController) { val navGraph = navController.createGraph( this@NestedGraph.id,Destinations.nestedFirstFragment ) { fragment<NestedFirstFragment>(Destinations.nestedFirstFragment) { action(Actions.to_nestedSecondFragment) { destinationId = Destinations.nestedSecondFragment } } fragment<NestedSecondFragment>(Destinations.nestedSecondFragment) } navController.graph.addAll(navGraph) // not working } } 是否返回 Raise 的值,其中 abase^expabase 都是整数。

首先注意,如果 expexp,函数返回 0,它确实是 1

然后假设函数对 abase^0 正常工作(即它确实返回 exp-1)。如果您调用函数 abase^(exp-1),它会计算 Raise(abase,exp),它等于 abase.abase^(exp-1)。因此,通过归纳,该函数适用于所有整数(除非发生溢出)。

对于整数,很快就会出现溢出:abase^exp 将,以及 Raise(2,32)Raise(3,20)Raise(4,16)...