2019暑假集训(第四天)- 递归算法

1. 斐波拉契数列(fbi)

在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;
int fbi(int n)
{
 
			if(n<=1) 
	            return n;
	        else
	        	return fib(n-1)+fib(n-2);
	 
}
int main()
{
 int n;
 cin>> n;
 cout<< fib(n) << endl;
  return 0;
}
  • 参考文章:https://blog.csdn.net/tanjie_123/article/details/53005466

倒序数(num)

在这里插入图片描述

#include <iostream>
using namespace std;

int  main()
{
    int a,b=0;
    cin>>a;
    while(a>0)//简直太简便了,都无法用言语来解释,参考下面图片
    {
        b=10*b+a%10;
        a/=10;//即 a=a/10
    }
    cout<<b<<endl;
}

  • 参考文章:https://blog.csdn.net/Sherry_Yue/article/details/83240568

3. 十进制转换成八进制(change)

在这里插入图片描述

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
void change(int x)
{
    int r = x % 8;
    x /= 8;
    if(x != 0) change(x);
    printf("%d", r);
}
int main()
{
    scanf("%d", &n);
    change(n);
    return 0;
}
  • 参考文章:https://www.cnblogs.com/mrclr/p/8325692.html

求N!的值(ni)

在这里插入图片描述

#include<iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    int s[n + 10];
    s[1] = 1;
    s[2] = 2;
    for (int i = 3; i <= n; i++) {
        s[i] = s[i - 1] * i;
    }
    cout << s[n];
    return 0;
}//仅供参考
  • 参考文章:https://blog.csdn.net/qq_43398760/article/details/83096054

求最大公约数(gcdmax)

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int Gcd(int a,int b)
{
    if(b == 0) return a;
    return Gcd(b,a%b);
} 

int main()
{
 int a, b;
 cin>> a >> b;
 cout<< Gcd(a, b) << endl;

  
}
  • 参考文章:https://blog.csdn.net/yang8627/article/details/83311114

双色汉诺塔问题(hanoi)

在这里插入图片描述

#include<stdio.h>
int ct=1;//记录步数,在步骤中输出
void move(int n,char from,char to)
{
    printf("第 %2d 步:把第 %d 个盘子:  %c >>>>>>> %c\n",ct++,n,from,to);
}
int hanoi(int n)//输出步数:
{
    int cnt = 2,ans = 1;
    if(n == 1)
        return 1;
    else
        return 2* hanoi(n-1) +1;
}
void hanoi_tower(int n,char x,char y, char z) //输出步骤
{
    if(n==1)
        move(1,x,z);
    else{
        hanoi_tower(n-1,x,z,y);
        move(n,x,z);
        hanoi_tower(n-1,y,x,z);
    }
}
int main()
{
    int n;//盘子个数
    printf("输入盘子个数:\n");
    scanf("%d",&n);
    char x = 'A',y = 'B',z = 'C';
    int t = hanoi(n);
    printf("一共需要%2d步。\n",t);
    hanoi_tower(n,x,y,z);
    return 0;
}

  • 参考文章:https://blog.csdn.net/qq_42815188/article/details/88856085

背包问题

在这里插入图片描述

  • https://www.cnblogs.com/jlyg/p/10353142.html
  • https://www.cnblogs.com/shoulinniao/p/9502828.html
发布了114 篇原创文章 · 获赞 98 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/github_39533414/article/details/100109173