问题是使用递归将给定数字的数字相加,为此我编写了以下代码:
#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/