c++有递推公式 f(n)=0.5*f(n-1)+0.7*f(n-2),已知f(0)=1,f(1)=1,求出第n项的值f(n)。
时间: 2023-12-16 12:03:08 浏览: 22
根据递推公式可得:
f(2) = 0.5*f(1) + 0.7*f(0) = 0.5*1 + 0.7*1 = 1.2
f(3) = 0.5*f(2) + 0.7*f(1) = 0.5*1.2 + 0.7*1 = 1.1
f(4) = 0.5*f(3) + 0.7*f(2) = 0.5*1.1 + 0.7*1.2 = 1.15
f(5) = 0.5*f(4) + 0.7*f(3) = 0.5*1.15 + 0.7*1.1 = 1.125
…
可以看出,每一项的计算都需要用到前面的两项,因此需要使用循环来计算:
def f(n):
if n == 0:
return 1
elif n == 1:
return 1
else:
fn_1 = 1
fn_2 = 1
for i in range(2, n+1):
fn = 0.5*fn_1 + 0.7*fn_2
fn_2 = fn_1
fn_1 = fn
return fn
测试:
print(f(0)) # 输出 1
print(f(1)) # 输出 1
print(f(2)) # 输出 1.2
print(f(3)) # 输出 1.1
print(f(4)) # 输出 1.15
print(f(5)) # 输出 1.125
print(f(6)) # 输出 1.1375
相关问题
用do while编写程序,计算输出n!=1*2*3*(n-1)*n=
使用do-while循环来计算n的阶乘可以实现在n大于等于1的情况下进行循环计算,直到n减到1为止。下面是一个使用do-while循环计算n的阶乘的示例程序:
```c++
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入一个正整数n:";
cin >> n;
int factorial = 1;
int i = 1;
do {
factorial *= i;
i++;
} while (i <= n);
cout << n << "的阶乘是:" << factorial << endl;
return 0;
}
```
在这个程序中,我们首先要求用户输入一个正整数n。然后,我们定义一个变量factorial来保存阶乘的结果,初始值为1。接下来,我们使用do-while循环来进行计算,循环条件i小于等于n。在每次循环中,我们当前的i乘以factorial,并将i加1。当i于n时,循环结束。最后,我们输出计算得到的阶乘结果。
C++while循环语句求: 1、s=1-2+3-4+5-…+n 2、s=1+2-3+4+5-6+7+…+n
以下是两种C++ while循环语句求解的例子:
1. 求解 s = 1-2+3-4+5-...+n
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入n的值:";
cin >> n;
int i = 1;
int s = 0;
int sign = 1;
while (i <= n) {
s += i * sign;
sign = -sign;
i++;
}
cout << "s = " << s << endl;
return 0;
}
```
2. 求解 s = 1+2-3+4+5-6+7+...+n
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入n的值:";
cin >> n;
int i = 1;
int s = 0;
int sign = 1;
while (i <= n) {
s += i * sign;
sign = -sign;
i++;
if (i % 2 == 0) {
i++;
}
}
cout << "s = " << s << endl;
return 0;
}
```