//这是一个用于在C语言中查找位数和的递归函数//我在IDE中没有得到任何输出。
int dsum(int n)
{
int a, r;
r = n % 10;
a = r + dsum(n / 10);
return a;
}
int main()
{
int a;
a= dsum(12345);
printf("%d",a);
return 0;
}发布于 2021-10-24 07:42:14
递归函数应该总是有一个基本情况作为最终的返回,在这种情况下,当n等于0时,这意味着所有的数字都被相加(当msb数字除以10时,结果是0)。然后,您将获得返回,它将使用当前lsb数字(或最右边的数字)的结果调用函数+输入为n/10的函数结果
int dsum(int n)
{
if (n == 0) {
return 0;
}
return n % 10 + dsum(n / 10);
}
int main()
{
int a;
a = dsum(12345);
printf("%d",a);
return 0;
}顺便说一句,我还建议研究一下尾递归:https://en.wikipedia.org/wiki/Tail_call
在这个场景中,它可能看起来像这样:
int dsum_tail_recursion(int n, int sum)
{
if (n == 0) {
return sum;
}
return dsum_tail_recursion(n/10, n%10 + sum)
}
int main()
{
int a;
a = dsum_tail_recursion(12345, 0); // 0 is the sum start value
printf("%d",a);
return 0;
}https://stackoverflow.com/questions/69694714
复制相似问题