[英]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
,並且很可能在堆棧溢出時以錯誤終止。
如果您不對CalcAn
和main
之間的計算進行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.