gpt4 book ai didi

java - 无法理解为什么每次递归调用都要加1

转载 作者:行者123 更新时间:2023-12-02 01:20:44 26 4
gpt4 key购买 nike

我一直在致力于一项代码挑战,该挑战要求不断将一个数字的数字相乘,直到数字减少到一位数,然后返回相乘的次数。如果传入的参数是单个数字,则该方法必须返回 0。

我已经使用循环解决了这个问题,但我想了解如何使用递归来解决这个问题。下面是我发现大部分内容我都能理解的代码,除了为什么每次调用都要添加 1?谁能帮助我理解这一点?谢谢!

public static int persistence(int num) {
int mul = 1;
if (num < 10) return 0;
while (num != 0) {
mul *= num % 10;
num /= 10;
}
return 1 + persistence(mul); // reason for 1 + method call?
}

persistence(39) //should return 3
persistence(999) //should return 4
persistence(4) // should return 0

// 39: 3 * 9 = 27, 2 * 7 = 14, 1 * 4 = 4. Value returned 3
// 4: 4 * 1 = 4. Value returned 0

最佳答案

是的..学习递归时也会出现类似的问题!每个工程师所走的路。让我们将 1 保存在一个变量中,并将 persistence(mul) 保存在另一个变量中。也就是说,

int oneStepResult = persistence(mul); // watch out that the rest of the line is evaluated when returned 0, that is, base case
int isDone = 1;
return oneStepResult + isDone;

试着这样想。作为建议,每当您在回答“递归做什么”的问题时遇到困难时,请尝试剖析其方法体。

<小时/>

34

enter image description here

<小时/>

39

enter image description here

关于java - 无法理解为什么每次递归调用都要加1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57760410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com