【问题标题】:Using C++, get f(n+1)=3/4*f(n)+4 result [closed]使用 C++,得到 f(n+1)=3/4*f(n)+4 结果 [关闭]
【发布时间】: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


【解决方案1】:

您必须定义递归函数f,然后从用户那里读取输入,然后将该函数应用于您已读取的输入(可能是整数?),并打印输出。

【讨论】:

    【解决方案2】:

    这听起来像是……递归人的工作!

    只需定义一个递归函数,当 n 为 0 时返回 3 或通过简化问题调用自身。

    伪代码类似于

    def f(x):
        if x == 0:
            return 3
        return 3 / 4 * f(n-1) + 4
    

    您可以使用std::cin &gt;&gt; dv 从用户那里获取一个值,然后使用该函数(用 C++ 重新编码)来完成繁重的工作。然后std::cout &lt;&lt; result 输出结果。请记住使用双精度而不是整数,包括像 3.0 这样的常量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2015-10-08
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      相关资源
      最近更新 更多