C++ C+中的递归+;:用递归求解证明

C++ C+中的递归+;:用递归求解证明,c++,recursion,C++,Recursion,在我离散数学课的实验室里,我们正在解决证明问题 在程序内。穷举法并不难,但我是 在递归方面有一些困难。问题如下: 编写一个程序,提示用户输入一个正整数n,然后在控制台中打印出一个,由以下公式给出: 下标n=(-1)^n·√n·a下标(n-1);a下标(1)=2 在我的函数CalcAn中,每当n等于2时,它应该返回2。但是程序一直停止。我做错了什么 #include <cstdlib> // For several general-purpose functions #include

在我离散数学课的实验室里,我们正在解决证明问题 在程序内。穷举法并不难,但我是 在递归方面有一些困难。问题如下:

编写一个程序,提示用户输入一个正整数n,然后在控制台中打印出一个,由以下公式给出:

下标n=(-1)^n·√n·a下标(n-1);a下标(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;
}
#包含//用于多个通用功能
#包含//用于文件处理
#包含//用于格式化输出
#包括//用于cin、cout和系统
#字符串数据类型的include//
#指数和平方根函数的include//
使用名称空间std;
双跟骨(内翻)
{
如果((n-1)=1)
回报率2.0;
其他的
返回功率(-1,n)*sqrt(n)*CalcAn(n-1);
}
int main(){
int n;
双安;
cout>n;
而(n;
}
an=pow(-1,n)*sqrt(n)*CalcAn(n-1);

cout如果您输入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;
}
double CalcAn(int n)
{
如果(n==1)
回报率2.0;
其他的
返回功率(-1,n)*sqrt(n)*CalcAn(n-1);
}
int main(){
int n;
双安;
cout>n;
而(n;
}    
an=CalcAn(n);

cout如果您输入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;
}
double CalcAn(int n)
{
如果(n==1)
回报率2.0;
其他的
返回功率(-1,n)*sqrt(n)*CalcAn(n-1);
}
int main(){
int n;
双安;
cout>n;
而(n;
}    
an=CalcAn(n);

作为旁注,
pow(-1,n)
是一种悲观主义,只要做
(n%2?-1:1)
…什么是“停止”“?它会崩溃吗?你有错误吗?如果你在Windows上运行,你确定它不会很快退出吗?@patatahooligan我在Mac上的Xcode上运行。构建会成功,在我输入一个整数后,它会等待大约5秒钟,然后停止运行并显示(LLdb)在我的输出中。只有当
n-1==1
时,递归才会停止,这与
n==2
相同。使用
CalcAn(n-1)
调用函数。如果输入是
2
,则调用
CalcAn(1)
继续递归直到
n==2
,这在堆栈溢出之前不会发生。作为旁注,
pow(-1,n)
是一种悲观,只需执行
(n%2?-1:1)
…什么是“停止”?它会崩溃吗?你有错误吗?如果你在Windows上运行,你确定它不会很快退出吗?@patatahooligan我在Mac上的Xcode上运行。构建会成功,在我输入一个整数后,它会等待大约5秒钟,然后停止运行并显示(LLdb)在我的输出中。只有当
n-1==1
时,递归才会停止,这与
n==2
相同。使用
CalcAn(n-1)
调用函数。如果输入是
2
,则调用
CalcAn(1)
继续递归,直到
n==2
,这在堆栈溢出之前不会发生。老实说,我不知道为什么我在
CalcAn
之外有一个迭代,我在看教科书中的例子,试图模仿它们所做的。设置
an=CalcAn(n)更有意义
谢谢。我真的不知道为什么我在
CalcAn
之外有一个迭代,我在看课本上的例子,试图模仿他们的做法。设置
an=CalcAn(n);
谢谢。