C++ 基本递归程序中的错误,有人能看到这个问题吗?
我这里有一个程序,它不断地对一个数字进行求和,直到得到一个数字。例如,给定num=38,该过程类似于:3+8=11,1+1=2。因为2只有一个数字,所以返回它 问题是,返回到main的值是垃圾,但就在从函数addDigits()返回该值之前,它是正确的。有人能看到我的虫子吗?这快把我逼疯了。非常感谢C++ 基本递归程序中的错误,有人能看到这个问题吗?,c++,function,recursion,C++,Function,Recursion,我这里有一个程序,它不断地对一个数字进行求和,直到得到一个数字。例如,给定num=38,该过程类似于:3+8=11,1+1=2。因为2只有一个数字,所以返回它 问题是,返回到main的值是垃圾,但就在从函数addDigits()返回该值之前,它是正确的。有人能看到我的虫子吗?这快把我逼疯了。非常感谢 #include <iostream> #include <vector> #include <stdio.h> using namespace std;
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int addDigits(int num)
{
vector <int> nums;
if (num <10)
{
return num;
}
int rem, temp = 0;
while (num > 9)
{
temp = num /10;
rem = num %10;
nums.push_back(rem);
num = temp;
}
nums.push_back(num);
int total = nums[0];
for (int i = 1; i < nums.size(); i++)
{
total += nums[i];
}
cout<<"total :"<<total<<endl;
if (total >= 10)
{
addDigits(total);
}
else
{
return total;
}
}
int main()
{
int val = 0;
int total = 0;
while(1)
{
cout<<"Enter a number : "<<endl;
cin>>val;
total = addDigits(val);
cout<<total<<endl;
}
}
#包括
#包括
#包括
使用名称空间std;
int addDigits(int num)
{
向量nums;
如果(数字9)
{
温度=num/10;
rem=num%10;
nums.推回(rem);
num=温度;
}
nums.推回(num);
整数总计=nums[0];
对于(int i=1;i coutaddDigits(total);
-此分支不返回任何内容。您不返回递归调用:
addDigits(total);
//should be
return addDigits(total);
您应该确保在编译器中打开了警告,以捕获如下问题。例如,GCC会发出以下警告:
警告:控件到达非无效函数的末尾[-Wreturn类型]
@Engineer999你的编译器没有警告你不要返回任何东西吗?我也不知道为什么会有反对票?他们希望这里的每个人都是专家吗?那么就没有必要了forum@Engineer999我自己并没有投反对票,但我可以想象那些投反对票的人会这样做,因为这很容易通过运行它来解决ugh是一个调试器。和/或启用和读取编译器警告。它不是论坛,也不是调试服务。我看不出这个问题对其他访问者有什么帮助?我认为一个更简单的解决方案是return num<10?num:addDigits(num%10+addDigits(num/10));
,但我承认我的模运算有点生疏。谢谢!不知道我怎么没发现it@Engineer999始终使用-Wall-Wextra编译,并修复编译器向您抛出的每个警告。