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

1405:质数的和与积

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

#include <stdio.h>
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;i<j;i++)
    {
        if(a[i]>a[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<stdio.h>
#include<stdlib.h>
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函数,结束运行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,438评论 0 2
  • 1)程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上...
    杵臼凉薄yo阅读 2,160评论 0 7
  • C语言函数的定义 我们将代码封装成函数的过程叫做函数的定义我们所写的每个C程序都至少有一个函数,即主函数 main...
    燃_烧阅读 308评论 0 0
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 6,522评论 1 42
  • 我想我们会在一起很久 春天去田野看野菜花 走你走过的路 夏天住古镇的民宿 晚上挽着手逛夜市 向写生的学生讨一支笔笨...
    常樂丶阅读 230评论 1 3