C++ 正在尝试查找某个号码的日志,但由于某些原因它无法正常工作
我试图写一个程序,解决一个日志函数。首先,我只是让它能够计算带有整数答案的日志(例如,36=2的日志6)。我采用了递归方法,从逻辑上讲,它似乎是可行的,但在尝试实现它时,它不起作用。我没有得到任何语法错误,但发生的是我得到了“未处理的异常”错误,我相信这是因为我采用了递归路径(出于某种原因是无限循环?)。希望这是足够的回答信息,谢谢C++ 正在尝试查找某个号码的日志,但由于某些原因它无法正常工作,c++,recursion,C++,Recursion,我试图写一个程序,解决一个日志函数。首先,我只是让它能够计算带有整数答案的日志(例如,36=2的日志6)。我采用了递归方法,从逻辑上讲,它似乎是可行的,但在尝试实现它时,它不起作用。我没有得到任何语法错误,但发生的是我得到了“未处理的异常”错误,我相信这是因为我采用了递归路径(出于某种原因是无限循环?)。希望这是足够的回答信息,谢谢 int counter = 1; void checkifDone(int initial, int base, int exponent); int mai
int counter = 1;
void checkifDone(int initial, int base, int exponent);
int main() {
checkifDone(6, 6, 7776);
}
void checkifDone(int initial, int base, int exponent) {
base = initial * base;
counter++;
if (base < exponent) {
checkifDone(initial, base, exponent);
}
else if (base == exponent) {
cout << "Answer is " << counter << endl;
}
else
cout << "not a whole number answer" << endl;
}
int计数器=1;
void checkifDone(int initial、int base、int index);
int main(){
checkifDone(6,677776);
}
void checkifDone(int initial、int base、int index){
基数=初始*基数;
计数器++;
if(基<指数){
检查完成(初始、基础、指数);
}
else if(基==指数){
cout只要base!=exponent
,这就会导致递归。永远不会调用else
分支(因为if
和else if
涵盖了所有可能性)
使用while循环并检查以下各项更容易:
void checkifDone(int base, int exponent) {
int count = 0;
int curr = 1;
while (base < exponent) {
curr *= base;
++count;
}
if (curr == exponent) {
std::cout << "Answer is " << count << std::endl;
} else {
std::cout << "not a perfect log" << std::endl;
}
}
void checkifDone(整数基,整数指数){
整数计数=0;
int curr=1;
while(基<指数){
curr*=基数;
++计数;
}
if(curr==指数){
std::cout只要base!=exponent
,这就会导致递归。永远不会调用else
分支(因为if
和else if
涵盖了所有可能性)
使用while循环并检查以下各项更容易:
void checkifDone(int base, int exponent) {
int count = 0;
int curr = 1;
while (base < exponent) {
curr *= base;
++count;
}
if (curr == exponent) {
std::cout << "Answer is " << count << std::endl;
} else {
std::cout << "not a perfect log" << std::endl;
}
}
void checkifDone(整数基,整数指数){
整数计数=0;
int curr=1;
while(基<指数){
curr*=基数;
++计数;
}
if(curr==指数){
std::无法跟踪如果指数
不是base的幂
,会发生什么。提示:如果(base!=指数)
与如果(base
。这段代码还有很多不正确的地方,但这会导致无限循环。应该是base内联突出显示
,尽管它作为编辑工具可能更有意义o你的问题并不是作为一个评论。我完全不知道哈哈…我只是编辑了我的代码,它工作得很好,但我对它的效率有一个问题。尽管我不是最好的程序员,但我知道全局变量不是你程序中最好的-比如int counter=1
(或者至少应该避免),我可以很容易地避免在这个特定的程序中这样做吗?我对这个想法一直有疑问,希望得到一个建议。感谢您再次介绍如果exponent
不是base
的幂,会发生什么。提示:if(base!=exponent)
与if(base
。这段代码还有很多不正确的地方,但这会导致无限循环。应该是base内联突出显示
,尽管它作为编辑工具可能更有意义o你的问题并不是作为一个评论。我完全不知道哈哈…我只是编辑了我的代码,它工作得很好,但我对它的效率有一个问题。尽管我不是最好的程序员,但我知道全局变量不是你程序中最好的-比如int counter=1
(或者至少应该避免),我可以很容易地避免在这个特定的程序中这样做吗?我对这个想法一直有困难,希望得到一个建议。感谢againNote,这将错误地得出结论,8
不是2
的力量。嘿,伙计,谢谢你的回答,我仔细考虑了一下,终于明白了!!虽然我没有使用你的男人们的解决方案,让我的思维更加开阔。顺便说一句,科斯塔斯,(这是我的错)base=base*base部分无效,原因如下:base将开始自身相乘,而不是用户给出的初始基数,这是我编写的更新代码,再次感谢您的帮助!我在注释中标记代码时遇到问题哈哈,对不起,让我弄清楚……如果您是inte,我刚刚编辑了我的实际代码根据我的想法,再次感谢你的帮助!看起来不错!这应该被编译成一个循环,因此传递额外的参数也不会增加开销。请注意,这将错误地得出结论,即8
不是2
的幂次。嘿,伙计,谢谢你的回答,我仔细考虑了一下,终于得到了它!!虽然我没有使用你们的解决方案,但这更开阔了我的思路。顺便说一句,Kostas,(顺便说一句,这是我的错)base=base*base部分无效,原因如下:base将开始自身相乘,而不是用户给出的初始基数,这是我编写的更新代码,再次感谢您的帮助!我在标记代码时遇到问题