【发布时间】:2023-09-20 01:26:01
【问题描述】:
我有一个递归函数int digit_sum(int number);,它返回数字中所有数字的总和。例如,digit_sum(159) = 1 + 5 + 9 = 15。
函数如下:
int digit_sum(int n)
{
if (n < 0)
n = -n;
if (n < 10)
return n % 10;
while (n % 10 == 0 && n > 0)
n = n / 10;
return n % 10 + digit_sum(n - (n % 10));
}
我不确定如何为此函数编写递归关系。我知道 T(0) 是前两个 if 语句常量的总和。但是,对于 T(n),我不确定如何表达 while 循环项和 T(n-k)。
模运算符让我失望。这是一个猜测,我相当肯定这是错误的:
T(n) = c_1 + c_2 + c_3*n (while 循环) + (n mod 10 + T(n - (n mod 10))) for n >= 10
我知道整个 T(n-k) 项是错误的。
【问题讨论】:
-
if (n < 10) return n % 10;太过分了。使用if (n < 10) return n; -
您必须返回个位数加上数字的 digit_sum 除以 10(即数字移位)或如果是最后一个数字,则加上数字本身。
标签: c recursion while-loop modulo recurrence