3 条题解

  • 8
    @ 2023-7-20 13:10:00

    解析

    image.pngimage

    题解

    #include <iostream>
    #include <iomanip>
    using namespace std;
    double f(double x, int n)
    {
        if (n > 1)
            return x / (n + f(x, n - 1));
        else
            return x / (1 + x);
    }
    int main()
    {
        int n;
        double x;
        cin >> x >> n;
        cout << fixed << setprecision(2) << f(x, n);
        return 0;
    }
    
    
    • 6
      @ 2023-7-21 21:45:42

      既然这道题这么简单,那我就发个压缩流代码供大家复制了,具体解析参考下面两位😄

      #include <bits/stdc++.h>
      double f(double x,int n){
          if(n==1) return x/(1+x);
          return x/(n+f(x,n-1));}
      int main(){
          int n;double x;std::cin>>x>>n;
          printf("%.2lf",f(x,n));return 0;}
      
      • 3
        @ 2023-7-20 20:19:04

        先看眼题:

        因为要保留两位小数,所以要导入一个iomanip

        接下来找边界条件与递归式

        边界条件:

        根据题目可以看出来,当n==1时,f(x,n)的返回值为x / (1 + x)

        所以,边界条件就是n==1,返回值就是x / (1+x)

        递归式:

        当n==2时:

        f(x,n) = x / (n + (x / (1 + x)))

        把x / (1 + x)换成函数可得

        f(x,n) = x / (n + f(x,1))

        再把1换成n-1就可以得到递归式了

        f(x,n) = x / (n + f(x,n - 1))

        具体代码如下

        #include <iostream>
        #include <iomanip>
        using namespace std;
        
        double f(double x,double n)
        {
            if(n == 1)
                return x / (1 + x);
            else
                return x / (n + f(x,n - 1));
        }
        
        int main()
        {
            double x,n;
            cin >> x >> n;
            cout << fixed << setprecision(2) << f(x,n);
            return 0;
        }
        
        • 1

        信息

        ID
        308
        时间
        1000ms
        内存
        128MiB
        难度
        3
        标签
        递交数
        1036
        已通过
        529
        上传者