1. 程式人生 > 其它 >藍橋杯演算法教學與培訓--遞迴與迴圈

藍橋杯演算法教學與培訓--遞迴與迴圈

技術標籤:c遞迴法

參考b站視訊 BV1ty4y117go
1、遞迴列印0-9的數字

#include<stdio.h>
int f(int begin,int last)
{
    if(begin>last) return 0; \\注意迴圈結束條件
    printf("%d\n",begin);
    f(begin+1,last);
}
int main()
{
    f(0,9);
}

程式碼執行結果
程式碼執行結果
2、陣列之和

#include<stdio.h>
#include<string.h>
int add(int
a[],int len)//迴圈 { int x=0; for(int i=0;i<len;i++) { x+=a[i]; } return x; } /* * 1、a[begin]+(begin+1------end) * 2、(a[0]...end-1)+a[end] * 3、折半求和 mid = (begin+end)/2 [begin,mid) (mid,end] */ int f(int a[],int begin,int len)//遞迴 { if(begin==len) return 0; int x; x=
f(a,begin+1,len); return x+a[begin]; } int main() { int a[]={2,5,3,9,12,7}; //int sum=add(a,len); int length=sizeof(a)/sizeof(a[0]); int sum=f(a,0,length); printf("%d",sum); }

程式碼執行結果

3、在n個球中,任意取m個,有多少種取法

#include<stdio.h>
int f(int n,int m)
{
    if(n<m) return 0;
    if
(n==m) return 1; if(m==0) return 1; return f(n-1,m-1)+f(n-1,m); } int main() { int k=f(5,3); printf("%d",k); }

在這裡插入圖片描述
4、求n個元素的全排列

#include<stdio.h>
#include<string.h>
int f(char data[],int k,int len)
{
    if(k==len)  
    {
        for(int i=0;i<len;i++)
        {
            printf("%c  ",data[i]);
        }
        printf("\n");
    }
    for(int i=k;i<len;i++)
    {
        {   char t=data[k];
            data[k]=data[i];
            data[i]=t;
        }
            f(data,k+1,len);
        {
            char t=data[k];
            data[k]=data[i];
            data[i]=t;
        }
    }   
}
int main()
{
    char data[]="ABC";
    int len=strlen(data);
    //scanf("%d",&k);
    f(data,0,len); 

}

在這裡插入圖片描述