我有一个函数,它自称近乎无数次,但确实有一个结束。它计算数学公式(在TeX中):
x<a
时:
g_{a}(x)=1
x>=a
时:
g_{a}(x)=g_{a}(x-1)+g_a(x-a)
这是我的代码(c ++):
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <cmath>
using namespace std;
double g( double a, double x){
if (x>=a) return (g(a,x-1)+g(a,x-a));
else if (x<a) return 1;
return 0;
}
int main(){cout << g(sqrt(10000019),10000019);}
我用g(sqrt(10000019),10000019);
调用该函数
如何停止SEGFAULT?
答案 0 :(得分:2)
我怀疑你的seg-fault是用尽了堆栈空间。
您可以限制/不限制堆栈空间的大小(至少在Linux上) 使用tcsh中的limit命令。
% unlimit stacksize
% limit
cputime unlimited
filesize unlimited
datasize unlimited
stacksize unlimited
coredumpsize 0 kbytes
memoryuse unlimited
vmemoryuse unlimited
descriptors 4096
memorylocked 64 kbytes
maxproc 1024
然后你可以取消限制你的stacksize
private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {
try {
File user = new File("src\\Battlefield4\\Batfield\\Users\\Username.txt"); //To create a universal file for Input & Output
File pass = new File("src\\Battlefield4\\Batfield\\Users\\Password.txt"); //To create a universal file for Input & Output
user.getParentFile().mkdirs(); //To denote the parent file
pass.getParentFile().mkdirs(); //To denote the parent file
Scanner scUser = new Scanner(user).useDelimiter("#"); //To scan the Username file
Scanner scPass = new Scanner(pass).useDelimiter("#"); //To scan the password file
username = txtUsername.getText(); //This gets the user input
password = txtPassword.getText(); //This gets the user input
int pos = 0; //Indicates the position of the Username in the save file
boolean loggedIn = false; //Flag to check if it's logged in
while(scUser.hasNext() && scPass.hasNext()) //Runs files in congruency
{
if(scUser.next().equalsIgnoreCase(username) && scPass.next().equals(password))
{
loggedIn = true;
scUser.close();
scPass.close();
new Selection(username).setVisible(true);
this.dispose();
break;
}
}
scUser.close();
scPass.close();
if(loggedIn == false)
{
JOptionPane.showMessageDialog(null,"Incorrect Username or Password!");
}
}
catch (FileNotFoundException ex)
{
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
再试一次。
答案 1 :(得分:1)
我有一个函数,它自称近乎无限次,但确实有一个结束。
你有无限量的堆栈内存吗?
如果不是(可能的情况),你将立即粉碎你的筹码。分段错误就是这里的明显标志。
我完全避免了递归。