C语言的函数递归

C语言的函数递归,第1张

CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

目录

一.什么是递归

二.递归的两个必要条件

三.举例说明

1.最简单的一个递归

2.输入一个数字,依次输出它的每一个数

思路:

3.编写函数不允许创建临时变量,求字符串的长度

思路

4.用递归求n的阶乘

思路


一.什么是递归

程序调用自身的编程技巧称为递归( recursion )。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小

二.递归的两个必要条件
  1. 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
  2. 每次递归调用之后越来越接近这个限制条件。
三.举例说明 1.最简单的一个递归
#include
int main()
{
    printf("hehe\n");
    main();
    return 0;
}


结果是:

按理来说这个代码应该会无限循环下去但是输出结果却结束了,这是因为“栈溢出”

用图来解释一下:

 

2.输入一个数字,依次输出它的每一个数

比如输入1234,那么输出1 2 3 4


思路:

递归就是把复杂的问题简单化,我们想如果我们输如1,那么就直接输出1就行,如果输入一个二位数,首先输出十位再输出个位,如果输入一个三位数,首先输出千位再输出十位在输出个位·······。

符合递归的两个要求,那么我们动手试试; 

#include
void print(int n)
{
    if(n>9)
    {
        print(n/10);
    }
  
    
    printf("%d ",n%10);//注意这里千万不能加else,否则递归就不能‘归’了
    
}
int main()
{
    int n=0;
    scanf("%d",&n);
    print(n);
}

结果是:

画一个解释图,以输入123为例子:

 

3.编写函数不允许创建临时变量,求字符串的长度 思路

这个题意思就是让我们自己做一个strlen函数出来,我们知道,字符串的结束标志是‘\0’,那么我们可以定义一个函数去判断此时地址所指向的是不是‘\0’,如果不是那么再次调用这个函数就行(地址加一)
 

#include
int my_strlen(char* str)
{
    int count=0;
    while(*str!='\0')
    {
        count++;
        str++;
    }

    return count;
}
int main()
{
    char str[]="China!";
    int n=0;
    n=my_strlen(&str);
    printf("字符串长度是:%d",n);
}

运行结果是:

但是这种方法仍然是不符合题目要求,我创建了一个临时变量count去存字符串长度,那么还需要改进,我们再想想能不能够直接相加呢?就像这样:


代码是:

#include
int my_strlen(char* str)
{
    if(*str!='\0')
    {
        return 1+my_strlen(str+1);
    }
    else
        return 0;
}
int main()
{
    char str[]="China!";
    int n=0;
    n=my_strlen(str);
    printf("字符串长度是:%d",n);
}

运行的结果也是6。

4.用递归求n的阶乘 思路





代码:

#include
int Fac(int n)
{
    int count=1;
    if(n==1)
        return 1;
    else
        return n*Fac(n-1);
}
int main()
{
    int n=0;
    scanf("%d",&n);
    int a=0;
    a=Fac(n);
    printf("最后的阶乘是:%d",a);
}

最后的结果是:

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/2990910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存