我需要一些帮助。我有一个递归函数,在c ++中,它简单地分解一个字符串(所有数字)并加上字符以查看它的总数是否小于9.如果不是它再次调用自己直到条件满足。到目前为止,它正在工作的所有东西,直到我的条件满足时,它再一次调用函数。这显然弄乱了我试图将其赋值给变量的值。我提到了许多引用,看起来我的语法是正确的?关于为什么我的函数最后一次调用自己的任何帮助。
/////////////////////////////////////////////// //////////
int finalNumber =0;
// set finalNumber
finalNumber = sumTotal(sumInput);
int sumTotal(int sumInputToString)
{
stringstream strToInt;
string convertedInt;
strToInt << sumInputToString;
convertedInt= strToInt.str();
int sum = 0;
for(int i = 0; i < convertedInt.length(); i++)
{
sum += (int)convertedInt[i] - 48;
}
if (sum > 9)
{
sumTotal(sum);
}
return sum; //ONCE SUM IS LESS THAN 9,which is what i want,
//MY PROGRAM AUTOMATICALLY JUMPS UP TWO LINES does it one
//more time than it will escape.
}
我已经尝试过将我的回报放入其他{}并交换我的if else条件所以我的回报将在我的if中。任何帮助将不胜感激。
感谢。
答案 0 :(得分:2)
条件内的陈述不应该是:
if (sum > 9)
{
sum = sumTotal(sum);
}
否则,您只是致电
if (sum > 9)
{
sumTotal(sum);
}
return sum;
什么都不做(即对最终输出没有贡献)。
答案 1 :(得分:1)
基于此评论
我的节目自动弹出两条线
我建议你在调试器中看到这个。跳起2行本身是正确的 - 你向上移动函数堆栈(即返回到调用你的函数 - 它又是sumTotal
)。那么你确定在完成所有工作后,功能真的从一开始就开始了吗?
还有一件事需要考虑:如果sumInputToString
的初始值小于10,则无论如何都会执行代码。你真的想要吗?
很少有直接与您的问题无关的建议。很难理解你的功能应该做什么。对于任何复杂的算法(这可能被认为是复杂的因为你使用了resursion)你必须有一个好的函数注释。我会建议这样的事情:
此函数首先计算给定的所有数字的总和 数。如果结果小于或等于9,则返回。如果不, 我们继续将这笔金额作为给定的数字。
你可能还包括短句,为什么你需要它(因为乍一看似乎很奇怪):
此功能可用于确定某个数字是否可以被3整除。
在评论这样的评论之后,你开始明白逻辑应该是什么,并且可能意识到你不需要在这里进行递归。并将您的代码转换为以下内容:
// Function comment
int CalculateRecursiveSumOfDigits(int val) {
while (val > 9) {
val = CalculateSumOfDigits(val); // TODO: implement this function
}
return val;
}