在我的离散数学课的实验室中,我们正在解决证据 在程序内。详尽的方法并不太难,但我是 递归时遇到一些困难。问题如下:
“编写一个程序,提示用户输入正整数n,然后在控制台中打印出一个由以下内容给出:
下标n =( - 1)^ n·√n·a下标(n-1);下标(1)= 2。
在我的函数CalcAn
中,只要n
等于2
,它就会返回2
。但该计划一直停止。我做错了什么?
#include <cstdlib> // For several general-purpose functions
#include <fstream> // For file handling
#include <iomanip> // For formatted output
#include <iostream> // For cin, cout, and system
#include <string> // For string data type
#include<cmath> // for exponent and square root functions
using namespace std;
double CalcAn(int n)
{
if ((n - 1) == 1)
return 2.0;
else
return pow(-1, n) * sqrt(n) * CalcAn(n - 1);
}
int main(){
int n;
double an;
cout << "Please enter a positive integer: ";
cin >> n;
while (n <= 0)
{
cout << "Error: Invalid input, please try again: ";
cin >> n;
}
an = pow(-1, n) * sqrt(n) * CalcAn(n - 1);
cout << endl << an << endl << endl;
return 0;
}
答案 0 :(得分:3)
如果输入2,则将1传递给CalcAn
,当堆栈溢出时,很可能会以错误结束。
如果您不在CalcAn
和main
之间划分计算,并使用与定义相同的基本情况,那么您将获得一个非常直接的翻译:
double CalcAn(int n)
{
if (n == 1)
return 2.0;
else
return pow(-1, n) * sqrt(n) * CalcAn(n - 1);
}
int main(){
int n;
double an;
cout << "Please enter a positive integer: ";
cin >> n;
while (n <= 0)
{
cout << "Error: Invalid input, please try again: ";
cin >> n;
}
an = CalcAn(n);
cout << endl << an << endl << endl;
return 0;
}