c - 这里的算法发生了什么,代码与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初学者,请多多包涵。
谢谢你。
解决方案
当您达到else
条件时,您将无限递归,因为您正在addition(x)
使用x
0 值,这不会进一步改变参数。
你真的不需要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;
}
推荐阅读
- amazon-web-services - 如何在 Amplify 中为多个组添加 adminQueries?
- nginx - Nginx 在针对特定子域时抛出 404 错误代码
- javascript - 特殊移除情况下 D3 链接中断
- windows - jq管道上的Windows命令提示符奇怪的行为
- rust - 如何在不安全的情况下从二叉搜索树中删除节点?
- javascript - 当 React 中的状态发生变化时如何添加转换?
- batch-file - Cmd 文件用换行符将文件内容放入 var
- ruby-on-rails - Rails Hotwire 不更新页面
- c# - 在 c# 和 .net 中将元素添加到列表中不起作用
- javascript - 创建类方法别名而不注册为属性