问题描述
一个数列A定义如下
A(1)=1,
A(2)=1/(1+A(1)),
A(3)=1/(1+A(2)),
……
A(n)=1/(1+A(n-1))。
定义一个函数function用来计算数列的第第n项的值,函数声明如下:
double function(int n);
输入说明:
输入为1个正整数n,n<=10。
输出说明
function函数返回输出数列A第n项的值给主函数。 主函数自行完成输出。
上面是题目,下面是我第一次写的代码,vs2022运行过了,但学校的oj系统没过。
double function(int n)
{
double sum = 0;
if (n > 0)
sum = 1 / (1 + function(n - 1));
else
return sum;
}
可以看出,当事人脑子有些混乱,这控制条件写的特别扭,不过也算塞翁失马了,让我发现这个问题。如果把return写在else里,当程序在倒序计算时,就会出现没有返回值的结果。就比如输入n=3,先计算function(0),由于n=0不满足if控制语句的条件,便会执行else里的return sum;但在计算function(1)时,if控制语句的条件满足了,不再执行else中的return语句,也就没有返回值返回给上一级function函数。
容易理解的代码如下
double function(int n)
{
double sum ;
if (n > 0)
sum = 1 / (1 + function(n - 1));
else
sum = 1;
return sum;
}