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

时间:2017-10-05 15:48:39

标签: c++ recursion

在我的离散数学课的实验室中,我们正在解决证据 在程序内。详尽的方法并不太难,但我是 递归时遇到一些困难。问题如下:

  

“编写一个程序,提示用户输入正整数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;
}

1 个答案:

答案 0 :(得分:3)

如果输入2,则将1传递给CalcAn,当堆栈溢出时,很可能会以错误结束。

如果您不在CalcAnmain之间划分计算,并使用与定义相同的基本情况,那么您将获得一个非常直接的翻译:

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;
}