第三十五、三十六课:函数练习,递归函数

1405:质数的和与积

【题目描述】
两个质数的和是S,它们的积最大是多少?
【输入】
一个不大于10000的正整数S,为两个质数的和。
【输出】
一个整数,为两个质数的最大乘积。数据保证有解。
【输入样例】
50
【输出样例】
589

#include 
int zscj(int n);
int sushu(int n);
int main()
{
    int i,n;
    scanf("%d",&n);
    printf("%d",zscj(n));
    return 0;
}
int zscj(int n)
{
    int i,a[10000],s,j=1;
    
    for(i=2;i<=n/2;i++)
    {
    
        if(sushu(i)==1&&sushu(n-i)==1)
        {
            a[j]=i*(n-i);
            j++;        
        }       
    }
    for(i=1;ia[i+1])
        {
            a[i+1]=a[i];
        }
    }
    return a[j];
}
int sushu(int n)
{
    int i;
    for(i=2;i<=n/2;i++)
    {
        if(n%i==0)
        return 0;
    }
    return 1;   
}

函数的递归

我们了解了函数的调用,函数的递归就是函数的自身调用。
例如:

#include
#include
void fun(int n);
int main()
{
    fun(1);
    system("pause");
    return 0;
}
void fun(int n)
{
    if(n<5)
    {
        printf("%d\n",n);
        fun(n+1);
        printf("%d\n",n);
    }
}

输出结果:
1
2
3
4
4
3
2
1
前一个 1 2 3 4 是第一个printf输出的结果,也就是函数递进去的过程。
后面的 4 3 2 1 是第二个printf输出的结果,也就是函数往回来归的过程。
函数自身调用自身结束(n == 5)后,函数返回到上一层的调用及:fun(4+1);此时的 n 等于 4 ;所以输出第五行的 4 。然后又归到上一层:fun(3+1);此时的 n 等于 3 ;所以输出第六行的 3 …
依次往回归,直到输出 1 后,返回到main函数,结束运行。

你可能感兴趣的:(第三十五、三十六课:函数练习,递归函数)