首页 > 解决方案 > 这里的算法发生了什么,代码与C中的递归问题有关?

问题描述

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

#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初学者,请多多包涵。

谢谢你。

标签: crecursion

解决方案


当您达到else条件时,您将无限递归,因为您正在addition(x)使用x0 值,这不会进一步改变参数。

你真的不需要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;
}

推荐阅读