Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在尝试查找某个号码的日志,但由于某些原因它无法正常工作_C++_Recursion - Fatal编程技术网

C++ 正在尝试查找某个号码的日志,但由于某些原因它无法正常工作

C++ 正在尝试查找某个号码的日志,但由于某些原因它无法正常工作,c++,recursion,C++,Recursion,我试图写一个程序,解决一个日志函数。首先,我只是让它能够计算带有整数答案的日志(例如,36=2的日志6)。我采用了递归方法,从逻辑上讲,它似乎是可行的,但在尝试实现它时,它不起作用。我没有得到任何语法错误,但发生的是我得到了“未处理的异常”错误,我相信这是因为我采用了递归路径(出于某种原因是无限循环?)。希望这是足够的回答信息,谢谢 int counter = 1; void checkifDone(int initial, int base, int exponent); int mai

我试图写一个程序,解决一个日志函数。首先,我只是让它能够计算带有整数答案的日志(例如,36=2的日志6)。我采用了递归方法,从逻辑上讲,它似乎是可行的,但在尝试实现它时,它不起作用。我没有得到任何语法错误,但发生的是我得到了“未处理的异常”错误,我相信这是因为我采用了递归路径(出于某种原因是无限循环?)。希望这是足够的回答信息,谢谢

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将开始自身相乘,而不是用户给出的初始基数,这是我编写的更新代码,再次感谢您的帮助!我在标记代码时遇到问题