int fei(int num) { if(num <= 2); { return 1; } return fei(num - 2) + fei(num - 1); }
//---------------------------------------------------------------------------- fei::SharedPtr<FEI> fei::Factory::createFEI(MPI_Comm comm) { fei::SharedPtr<FEI> fei(new fei::FEI_Impl(this, comm)); return(fei); }
int main() { int num = 0; printf("请输入一个编号: "); scanf("%d", &num); printf("结果数字是%d\n", fei(num)); return 0; }
//---------------------------------------------------------------------------- fei::SharedPtr<FEI> fei::Factory::createFEI(fei::SharedPtr<LibraryWrapper> wrapper, MPI_Comm comm) { //fei::SharedPtr<FEI> fei(new fei::FEI_Impl(wrapper, comm)); fei::SharedPtr<FEI> fei(new FEI_Implementation(wrapper, comm)); return(fei); }
char *TTabDelimExampleGenerator::mayBeTabFile(const string &stem) { vector<string> varNames, atoms; vector<string>::const_iterator vi, ai, ei; TFileExampleIteratorData fei(stem); // if there is no names line, it is not .tab while(!feof(fei.file) && (readTabAtom(fei, varNames, true, csv)==-1)); if (varNames.empty()) { char *res = mlnew char[128]; res = strcpy(res, "empty file"); return res; }
TTabDelimExampleGenerator::TTabDelimExampleGenerator(const string &afname, bool autoDetect, bool acsv, const int createNewOn, vector<int> &status, vector<pair<int, int> > &metaStatus, const char *aDK, const char *aDC, bool noCodedDiscrete, bool noClass) : TFileExampleGenerator(afname, PDomain()), attributeTypes(mlnew TIntList()), DK(aDK ? strcpy((char *)malloc(strlen(aDK)+1), aDK) : NULL), DC(aDC ? strcpy((char *)malloc(strlen(aDC)+1), aDC) : NULL), classPos(-1), headerLines(0), csv(acsv) { // domain needs to be initialized after attributeTypes, classPos, headerLines domain = readDomain(afname, autoDetect, createNewOn, status, metaStatus, noCodedDiscrete, noClass); TFileExampleIteratorData fei(afname); vector<string> atoms; for (int i = headerLines; !feof(fei.file) && i--; ) // read one line (not counting comment lines, but the flag line may be empty) while(!feof(fei.file) && (readTabAtom(fei, atoms, true, csv, (headerLines==3) && !i) == -1)); startDataPos = ftell(fei.file); startDataLine = fei.line; }
int test_FEI_Impl::test1() { if (numProcs_ > 1) { return(0); } #ifdef HAVE_FEI_AZTECOO testData* testdata = new testData(localProc_, numProcs_); fei::SharedPtr<LinearSystemCore> linSys(new fei_trilinos::Aztec_LinSysCore(comm_)); fei::SharedPtr<LibraryWrapper> wrapper(new LibraryWrapper(linSys)); fei::SharedPtr<fei::FEI_Impl> fei(new fei::FEI_Impl(wrapper, comm_, 0)); std::string param0("name test1"); FEI_OSTRINGSTREAM osstr; osstr << "debugOutput "; if (path_.empty()) osstr << "."; else osstr << path_; std::string param1 = osstr.str(); int numParams = 2; char** params = new char*[numParams]; params[0] = const_cast<char*>(param0.c_str()); params[1] = const_cast<char*>(param1.c_str()); //call the parameters function a couple of times to test the fei's internal //method for merging string lists when parameters is called more than once. CHK_ERR( fei->parameters(1, ¶ms[0]) ); CHK_ERR( fei->parameters(1, ¶ms[1]) ); CHK_ERR( fei->parameters(2, params) ); delete [] params; CHK_ERR( fei->setIDLists(1, &(testdata->ids[0]), 1, &(testdata->ids[0])) ); CHK_ERR( fei->initFields(testdata->fieldIDs.size(), &(testdata->fieldSizes[0]), &(testdata->fieldIDs[0])) ); int numNodesPerElem = testdata->ids.size(); std::vector<int> numFieldsPerNode(numNodesPerElem, 1); std::vector<int*>nodalFieldIDs(numNodesPerElem, &(testdata->fieldIDs[0])); CHK_ERR( fei->initElemBlock(0, //blockID 1, //numElements numNodesPerElem, &numFieldsPerNode[0], &nodalFieldIDs[0], 0, //numElemDofFieldsPerElement NULL, //elemDofFieldIDs 0)); //interleaveStrategy CHK_ERR( fei->initElem(0, //blockID 0, //elemID &(testdata->ids[0])) ); std::vector<int*> sharingProcs2D(testdata->sharedIDs.size()); int offset = 0; for(int i=0; i<(int)testdata->numSharingProcsPerID.size(); ++i) { sharingProcs2D[i] = &(testdata->sharingProcs[offset]); offset += testdata->numSharingProcsPerID[i]; } if (testdata->sharedIDs.size() > 0) { CHK_ERR( fei->initSharedNodes(testdata->sharedIDs.size(), &(testdata->sharedIDs[0]), &(testdata->numSharingProcsPerID[0]), &sharingProcs2D[0]) ); } CHK_ERR( fei->initComplete() ); std::vector<double> rhsData(testdata->ids.size(), 1.0); double one = 1.0; CHK_ERR( fei->setMatScalars(1, &(testdata->ids[0]), &one) ); CHK_ERR( fei->setRHSScalars(1, &(testdata->ids[0]), &one) ); CHK_ERR( fei->setCurrentMatrix(testdata->ids[0]) ); CHK_ERR( fei->setCurrentRHS(testdata->ids[0]) ); CHK_ERR( fei->putIntoRHS(FEI_NODE, testdata->fieldIDs[0], testdata->ids.size(), &(testdata->ids[0]), &rhsData[0]) ); int numBCNodes = 2; GlobalID* BCNodeIDs = &(testdata->ids[0]); int BCFieldID = testdata->fieldIDs[0]; double* values = new double[numBCNodes]; int* offsetsIntoField = new int[numBCNodes]; for(int ii=0; ii<numBCNodes; ++ii) { values[ii] = 1.0; offsetsIntoField[ii] = 0; } CHK_ERR( fei->loadNodeBCs(numBCNodes, BCNodeIDs, BCFieldID, offsetsIntoField, values) ); delete [] offsetsIntoField; delete [] values; CHK_ERR( fei->loadComplete() ); int numActiveNodes = 0; CHK_ERR( fei->getNumLocalNodes(numActiveNodes) ); if (numActiveNodes != (int)testdata->ids.size()) { ERReturn(-1); } GlobalID* localNodes = new GlobalID[numActiveNodes]; CHK_ERR( fei->getLocalNodeIDList(numActiveNodes, localNodes, numActiveNodes) ); int totalFieldSize = 0; for(int ii=0; ii<(int)testdata->fieldSizes.size(); ++ii) { totalFieldSize += testdata->fieldSizes[ii]; } double* soln = new double[numActiveNodes*totalFieldSize]; int* offsets = new int[numActiveNodes+1]; CHK_ERR( fei->getNodalSolution(numActiveNodes, localNodes, offsets, soln) ); delete [] offsets; delete [] soln; delete [] localNodes; CHK_ERR( fei->resetInitialGuess() ); int fieldSize = 0; CHK_ERR( fei->getFieldSize(testdata->fieldIDs[0], fieldSize) ); double initTime, loadTime, solveTime, solnReturnTime; CHK_ERR( fei->cumulative_cpu_times(initTime, loadTime, solveTime, solnReturnTime) ); delete testdata; #endif return(0); }