【发布时间】:2013-05-09 12:09:18
【问题描述】:
我正在做一个简单的 C 程序,即 5 位数字的数字总和。虽然我已经使用一个简单的函数完成了它,但我也需要使用递归来完成它。我已经在网上阅读了很多关于这个问题的解决方案使用递归并实现了我的一个。但这会出错,我无法弄清楚我在算法中正在做什么。
#include<stdio.h>
int sum5(int x); //function for sum of digits of 5 digit number
int main()
{
int x;
int result;
printf("Enter a 5 digit number : ");
scanf("%d",&x);
printf("Number entered by you is %d",x);
result = sum5(x);
printf("Sum of digits of 5 digit number is = %d",&result);
return 0;
}
int sum5(int x)
{
int r;
int sum=0;
if(x!=0){
r=x%10;
sum=sum+r;
x=x-r; //doing this so that 0 come in the last and on diving it by 10, one digit will be removed.
sum5(x/10);
}
return sum;
}
但在执行后我得到了错误的结果。它在输出上转储了一些匿名值。
【问题讨论】:
-
这部分没用 x=x-r;因为您之后发送的内容无论如何都会删除最右边的数字。它不会起作用,因为没有人从递归调用中获得返回值。