【发布时间】:2015-01-19 01:17:00
【问题描述】:
我对 C++ 很陌生,下一个问题我遇到了困难:
编写一个要求用户输入数字的程序:n 然后计算 f(n)。
请注意:
f(0)=3 and f(n+1) = 3/4 * f(n) + 4 ?
例如:
f(1)= 6.25
f(2)= 8.69
f(3)= 10.52
f(4)= 11.89
f(5)= 12.92
================================================ =====
那么,我该如何解决呢?
谢谢大家..
我根据 paxdiablo 先生的回答尝试此代码:
#include<iostream>
using namespace std;
int main()
{
double x=0.0;
cout<<" enter an integer N:";
cin>> x;
double f1(double x)
{
if x==0.0
return 3;
return 3 / 4 * f1 (x-1) + 4;
}
return 0;
}
但程序永远不会运行!
================================================ =
正确的解决方案是:
#include<iostream>
#include<iomanip> //To enable "setprecision" tool
using namespace std;
double f(int x){
if (x==0)
{return 3;}
return (3.0/4.0) * f(x-1) + 4.0; //we add zeros to get "double" results
}
int main()
{
int n=0;
cout<<" Please, enter an integer :";
cin>> n;
cout<<fixed<<setprecision(2)<<f(n); //"setprecision" used to get only two digits after the point
return 0;
}
非常感谢大家帮助我,特别感谢 paxdiablo 先生。
【问题讨论】:
-
你在哪一点卡住了?向我们展示您迄今为止尝试过的内容以及遇到的错误。
-
从主体中取出“double f1(double x)”部分。并使用括号得到正确答案
-
你输出了
enter an integer,但是你把它读成了一个double。此外,您的函数应将整数作为其输入参数(它也使与零的比较更安全,尽管在您的特殊情况下它应该与双精度数一起使用)。否则,除了一些语法错误(在您的书中查找if和函数)之外,您几乎可以解决问题。只需输出结果即可。 -
不要说“为什么这段代码不起作用”。打印出错误是什么,然后在本站范围内。
-
正如 mhs 所发布的,您在 main() 中声明了 f1 函数。除非这是我不知道的一些新的 C++ 功能,否则我假设您需要将 f1 函数声明移到 main 之外(如果您不想声明原型,则在 main 之前),然后让 main 调用 f1功能。还检查 x == 0.0 可能是有风险的,但由于输入应该是一个整数,并且因为你从 x 中减去 1,所以 double x 应该包含精确的整数值。
标签: c++ math recursion functional-programming