这道c题怎么写?

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:11:01
题目:1+1/(1+1/(...+1(1+1/x)...)) n辰嵌套 写函数计算和打印 x=1.0....20.0,n=10时的函数直表

我是这么写的

#include "stdafx.h"

double f1(double x){
return 1.0+1.0/(1.0+1.0/x);
}

double f2 (int n){
return n==1?f1(x):1.0+1.0/f2(n);
}

int main()
{
double x=1.0;
int n=10;

for(;x<=20.0;x+=1.0){

printf ("x=%f,n=%d,f(n)=%f",x,n,f2(n));

}
return 0;
}

但是这么写f2里的x就成了没声明的变量

谁能说一下正确的方法
用全局变量的话那x更新数值时怎么半?仅仅是放到外面程序运行后会出错,
把x加进去的话递推就出问题了....

我不知道是没理解你题意,还是你题描述有问题,总之最致命的问题是,递归时候n没有减1,
参数问题,可以按一楼所说的解决。
改过的程序见下,仅供参考~~

double f2 (int n,double x){
return (n==1)?(1.0+1.0/x):(1.0+1.0/f2(n-1,x));
}
int main()
{
double x=1.0;
int n=10;

for(;x<=20.0;x+=1.0){
printf ("x=%.18f,n=%d,f(n)=%.18f\n",x,n,f2(n,x));
}
return 0;
}

那就把x也作为参数传入fun2()函数.

或者把x声明为全局变量(即把x的定义语句从main()函数移到外面,所有的函数之前)

f1那么短就一句话,直接写到f2里好了,而且这么明显的中止条件我觉得不必些个函数去算了。

#include<iostream>
using namespace std;
double f1(double x)
{
return 1+1/x;
}
double f2(int n, double x)
{
int i = 1;
double k = f1(x);
while(i != n)
{
k = f1(k);
i++;
}
return k;
}

int main()
{
for(int i=0;i<20;i++)
{
cout<<f2(10,double(i))<<endl;
}