#include<iostream>
#include<limits>
using std::cin;
using std::cout;
using std::endl;
template<class T>
bool input(T& a)
{
int i = 1;
while(true)
{
cin >> a ;
if(cin && a >= 0)
return true;
else
{
if(i == 3) return false;
if(!cin)
{
cin.clear();
cin.ignore((std::numeric_limits <int> ::max)(), '/n');
}
cout << "the input is not ge than 0"
<< "do you want to try again? Y / N "
<< endl;
char ch;
cin >> ch;
if(ch != 'Y' && ch != 'y' ) return false;
++i;
}
}
}
//递归
int rfn(int n)
{
if(n == 0)
return 0;
else
{
if(n == 1)
return 1;
else
return rfn(n - 1) + rfn(n - 2);
}
}
// 非递归
int fn(int n)
{
int f0 = 0;
int f1 = 1;
int res = 0;
if(n == 0) return 0;
if(n == 1) return 1;
res = f1;
int a = f0;
for (int i = 1; i != n; ++i)
{
int b = res;
res = res + a;
a = b;
}
return (res);
}
int main()
{
cout << "please input a number " << endl;
int n;
input(n);
cout << "the answer is " << rfn(n) << endl;
cout << "the answer is " << fn(n) << endl;
return 0;
}