复兴无基础第二十七课 递归(二)
2025-11-23 15:25:35
发布于:上海
T1【递归的应用(一)】斐波那契
#include <iostream>
using namespace std;
int f(int n) {
//当前为第一项和第二项返回1
if (n <= 2) {
return 1;
}
//当前不为第一项和第二项返回前两项的和
return f(n - 1) + f(n - 2);
}
int main() {
//定义n并把n输入,带入到递归求解
int n;
cin >> n;
cout << f(n);
return 0;
}
T2【递归的应用(一)】Pell数列
#include <iostream>
using namespace std;
//采用递归,f(n) 的里返回 pell 数列的第 n 项的值
long long f(int n) {
//n为1和n为2的时候分别返回1和2
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
//当n不为1和2到时候返回2*f(i-1)+f(i-2)
return 2 * f(n - 1) + f(n - 2);
}
int main() {
//定义n输入n,接着输入n个k,将k带入递归求出第k项的值
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int k;
cin >> k;
cout << f(k) << '\n';
}
return 0;
}
T3【递归的应用(一)】辗转相除法最大公约数
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
//当b为0是输出a
if (a % b == 0) return b;
//如果b不为0,将b,和a%b带入到递归
return gcd(b, a % b);
}
int main() {
//定义a和b并输入,将a和b带入到函数递归
int a, b;
cin >> a >> b;
cout << gcd(a, b);
return 0;
}
T4【递归的应用(一)】新斐波那契
#include <iostream>
using namespace std;
int dfs(int x) {
//当前为第一项、第二项、第三项返回1、2、3
if (x == 3 || x == 2 || x == 1) {
return x;
}
//当前不为第一项和第二项或第三项返回前两项的和
return dfs(x - 1) + dfs(x - 2) + + dfs(x - 3);
}
int main() {
//定义n并把n输入,带入到递归求解
int n;
cin >> n;
cout << dfs(n);
return 0;
}
T5【递归的应用(一)】求f(x,n)
#include <cmath>
#include <iostream>
using namespace std;
double x, n;
double f(double x, double n) {
//到达最后一层返回1+x,否则继续往下递归
if (n == 1) return sqrt(1 + x);
return sqrt(n + f(x, n - 1));
}
int main() {
// 输入x和n,将x和n带入递归求解
cin >> x >> n;
printf("%.2lf", f(x, n));
return 0;
}
T6【递归的应用(一)】digit函数
#include<iostream>
using namespace std;
void digit(int n,int k){
//查找的位置k不为1时,则将n/10和k-1带入下一层递归
if(k!=1){
digit(n/10,k-1);
}
else{
//如果当前从右往左的位置已经为1,那么输出当前位置上的数
cout<<n%10;
}
}
int main(){
//定义n和k并输入,然后带入到递归求解
int n,k;
cin>>n>>k;
digit(n,k);
return 0;
}
这里空空如也










有帮助,赞一个