簡體   English   中英

C ++中的遞歸:使用遞歸解決證明

[英]Recursion in C++: Solving proofs using recursion

在我離散數學課程的實驗室中,我們正在程序中求解證明。 詳盡的方法並不難,但是遞歸有一些困難。 問題如下:

“編寫一個程序,提示用戶輸入一個正整數n,然后在控制台中打印出一個如下所示的:

下標n =(-1)^ n·√n·下標(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;
}

如果輸入2,則將1傳遞給CalcAn ,並且很可能在堆棧溢出時以錯誤終止。

如果您不對CalcAnmain之間的計算進行CalcAn ,並且使用與定義相同的基本情況,那么您將獲得一個非常簡單的翻譯,該翻譯應該有效:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM