微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决递归在 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)...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。