当我在函数素数上递归下面的代码时,程序崩溃了我的代码中的错误?

时间:2018-01-17 23:01:54

标签: c++ recursion

每当我尝试在函数prime中递归时,我的程序在该步骤崩溃。我认为问题是将函数传递为递归。我做错了什么?

#include <iostream>

using namespace std;

int smallest(int n) {
   for( int x = 2 ; x <= n/2 ;  x++){
     if (n%x==0) {
        return x;
     }
     else {
        return 0;
     }
   }
}

int prime(int n, int(*small)(int)) {
  int factor;
  if (n == 1){
    return 0;
  }
  else {
    factor = n % small(n);
    cout << small(n) << endl;
    return prime(factor , small);
  }
}

int main() {
  prime(50 , &smallest);
  return 0;
}

1 个答案:

答案 0 :(得分:0)

正如评论所指出的,当small返回0时,您会在不应该的时候继续递归。这可以通过对基本案例的小更新来解决:

if (n <= 1){
    return 0 ;
}

此外,值得指出的是,就目前情况而言,prime功能永远不会自我称呼。当您致电smallest时,您将获得一个素数!