如何解决递归在 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^exp
和 abase
都是整数。
首先注意,如果 exp
是 exp
,函数返回 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 举报,一经查实,本站将立刻删除。