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

标签 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初学者,请多多包涵和包容。

谢谢。

最佳答案

当您遇到else条件时,您将无限递归,因为您正在使用x值为0进行addition(x),这不会进一步改变论点。

您实际上并不需要 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;
}

关于c - 这里的算法发生了什么,代码与 C 中的递归问题有关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52796047/

相关文章:

C - 将函数加载到数据库 - 调用堆栈错误/段错误

mysql - 如何清理 C 中的 SQL 查询?

c - libcurl 在上传数据前延迟 1 秒,命令行 curl 不会

c - 在 Ubuntu 上使用 Solaris 中的 C 套接字

recursion - LISP-- 递归回文

sql - 如何在SQL Server中的同一张表上递归查询结果

c - 用 C 语言发送 IPv6 数据包的示例代码

c - 如果找不到数字,如何使这个递归二分查找程序退出而不崩溃?

java - 迷宫 2D 递归算法问题

python - 数字中所有数字的递归和