递推的本质

       之前呢,我上课,然后我上课呢,把概念转发了啊,概念转发了之后呢,到了新浪微博,有人开始问我说递归的本质是什么,我也觉得这个问题非常的好,递归的本质到底是什么呢?

        不是哥们,递归和递推不是同一个东西!!!!!!!!!!

递归是什么?递归是有了已知条件,除了已知条件外的所有都可以用一个方法表示出来,这个方法可以自己调用自己,这个方法就叫做递归的方法。

递推是什么?递推是有了已知条件,所有的其他状态都可以由这个状态变化而来,这个状态到另一个状态的变化可以用一种关系表达式表达出来,这个关系表达式就叫做递推两个状态之间的关系。

从大到小都忘了?

666哥么

2024六月八,端午节来了,祝高考的旗开得胜,中考的器宇轩昂,也祝我好好考完小考

我第天

正题:

答案放送!!!!!!!!!!!!!!!!!!!!!!!!

2024.6.8 21:30:00      ASDF ATN

the 1st

                                              先来道斐波那切给大家激发一下啊 

#include <iostream>
#define int long long //使用宏表示longlong
using namespace std; 
int feb[50]={};       //搞个数组,和埃氏筛一样
int f(int n) {
    if(feb[n]!=0) return feb[n]; 
    if(n==1||n==2) return 1; 
    feb[n] = f(n-1)+f(n-2); //改数组去,值从入口里递归出来
    return feb[n]; //好了,改好了,值就是数组里那个
}
signed main() {      //使用宏表示longlong,则main变成longlong main
    int n; 
    cin >> n;        //输入
    cout << f(n);    //输出
    return 0;        //回0
}

 其实这玩意可以算的:

                                                  f(x) = \frac{\sqrt{5} }{5}[(\frac{1+\sqrt{5} }{2})^x-(\frac{1-\sqrt{5} }{2})^x]

x是第几项(在斐波那契里面)

 the 2nd

这个骨牌铺方格很有趣,可以研究一下

#include <iostream>
using namespace std;
int main(){
	int i,n;
	long long a[55];
	cin>>n;
	for (i=1;i<=n;i++){
		if (i==1)a[i]=1;
		else if (i==2)a[i]=2;
		else if (i==3)a[i]=4;
		else if (i>3)a[i]=a[i-1]+a[i-2]+a[i-3];
	}
    cout<<a[n];
	return 0;
}

the 3rd

                                                        

                                 平面分割,嗯,真是一个好问题,使我的双手飞快

#include<bits/stdc++.h>
using namespace std;
/*
f(n) = f(n - 1) + n
= f(n - 2) + (n - 1) + n
……
= f(1) + 1 + 2 + …… + n
= n(n + 1) / 2 + 1
看的懂?
*/
int main () {
	int n;
	cin>>n;
	cout<<n*(n+1)/2+1;
    return 0;
}

 the 4th

                                                         昆虫繁殖,这个需要细究

#include<bits/stdc++.h>
using namespace std;
                          
int f[55], e[55];       
 
int main() {
	int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    for(int i = 0; i < x; i++) f[i] = 1;
    for(int i = x; i <= z; i++) {
        e[i] = f[i - x] * y;
        f[i] = f[i - 1] + e[i - 2];
    }
    printf("%d\n", f[z]);
}

 the 5th

      

                                                           位数问题,这个可以去查

#include<bits/stdc++.h>
using namespace std;
int main () {
    int n,o[1010]={},j[1010]={},x=9;
    cin>>n;
    o[1]=9,j[1]=1;
    for(int i=2;i<=n;i++){
    	if(i==n){
    		x=8;
		}
		o[i] = (x*o[i-1]+j[i-1])%12345;
		j[i] = (x*j[i-1]+o[i-1])%12345;
	}
	cout<<o[n];
    return 0;
}

 the 6th                 

              

                                                                吃糖果这个有点难

#include<bits/stdc++.h>
using namespace std;
int qiangsirxp(int n){
    	if(n <= 3){
    		if(n==1){
    			return 0;
			}
			return 1;
		}
		else{
			return qiangsirxp(n-1)+qiangsirxp(n-2);
		}
	}
int main(){
	int n;
	cin>>n;
    cout<<qiangsirxp(n+2);
	return 0;
}

 the 7th

               

                                                                外星密码这个还好

#include <iostream>
using namespace std;
int pell(int k) {
    if (k == 1) return 1;
    if (k == 2) return 2;
    
    int a = 1, b = 2, c;
    for (int i = 3; i <= k; ++i) {
        c = (2 * b + a) % 32767; 
        a = b; 
        b = c;
    }
    return c;
}
 
int main() {
    int n;
    cin >> n; 
    while (n--) {
        int k;
        cin >> k; 
        cout << pell(k) << endl; 
    }
    return 0;
}

对了,这里有但的改版,确定不看看?

@小蛋の 编程

(容器,他们就看得懂一个longlong,一点注释不写,你当这是下节课呢,

                        我喆哥,我亲哥!代码加点注释,你至少让其他的人看懂!,就哪怕那么一点!

#include <bits/stdc++.h>
#define pb push_back                             //定义
using namespace std;
int main(){
    vector<long long> p(1,1);                    //容器
    p.pb(1);
    p.pb(2);
    int n,a[21]={};
    cin>>n;
    int m=0;
    for(int i=1; i<=n; i++){
        cin >> a[i];
        if(a[i]>m) m=a[i];
    }
    for(int i=3; i<=m; i++){
        p.pb((2*p[i-1]+p[i-2])%32767);
        for(int i=1; i<=n; i++){
            cout << p[a[i]] << '\n';             //容器p,a数组
        }
    return 0;
}

 最后:

inft

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值