每当我尝试在函数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;
}
答案 0 :(得分:0)
正如评论所指出的,当small
返回0
时,您会在不应该的时候继续递归。这可以通过对基本案例的小更新来解决:
if (n <= 1){
return 0 ;
}
此外,值得指出的是,就目前情况而言,prime
功能永远不会自我称呼。当您致电smallest
时,您将获得一个素数!