这里的算法发生了什么,代码与C中的递归问题有关?

时间:2018-10-13 18:32:34

标签: c recursion

问题是使用递归添加给定数字的数字,为此我编写了以下代码:

#include <stdio.h>
#include <math.h>

int addition(signed int x);

int main() {
    signed int num;
    printf("enter the number : ");
    scanf("%d", &num);
    printf("%d", addition(num));
    return 0;
}

int addition(signed int x) {
    signed int sum;
    sum = x % 10;
    x = x / 10;
    if (log10(x) + 1 == 1) {
        sum = sum + x;
    } else {
        sum = sum + addition(x);
    }
    return(sum);
}

此代码有效,但是奇怪的问题是,它只添加了以1开头的数字。我不明白发生了什么,为什么会这样。如果有人可以解释,那将真的很有帮助。

ps:我是C语言的初学者,所以请容忍并忍受我。

谢谢。

1 个答案:

答案 0 :(得分:0)

当您达到else条件时,您将无限递归,因为您正在使用addition(x)值为0进行x,而 not 不会更改参数

您真的不需要log10 [并且测试可能是错误的。]

这是一个经过清理的工作版本:

#include <stdio.h>
#include <math.h>

int addition(int x);

int
main()
{
    int num;

    printf("enter the number : ");
    scanf("%d", &num);

    printf("%d\n", addition(num));

    return 0;
}

int
addition(int x)
{
    int sum;

    sum = x % 10;
    x /= 10;

    if (x != 0)
        sum += addition(x);

    return sum;
}