21 11 2 C语言学习总结(函数嵌套调用,链式访问,函数递归)

一 函数嵌套调用

 函数能嵌套调用,不能嵌套定义。

二 链式访问

 

 这两段代码产生同样的效果,第二段代码中strlen函数作为printf打印函数的第二个参数,将自己的返回值3返回给peintf函数

 

 由MSDN了解到,printf函数的返回值是打印字符个数,所以该代码打印了4321

 三 函数递归(函数自己调用自己)

 利用递归打印整型值的每一位(按顺序):

#include<stdio.h>
void Print(unsigned int n)
{
    if(n>9)
        Print(n/10);
    printf("%d ",n%10);
}
int main()
{
    unsigned int num=0;
    scanf("%u",&num);
    Print(num);
    return 0;
}

 注意:1.递归必须有限制条件,满足条件时递归不在继续。

            2.每次递归之后越来越接近限制条件。

编写函数用递归求字符串长度:

#include<stdio.h>
int Strlen(char* s)
{
    if('\0'==*s)
        return 0;
    else
        return 1+Strlen(s+1);
}
int main()
{
    char arr[100]={'\0'};
    int n=0;
    gets(arr);
    n=Strlen(arr);
    printf("%d",n);
    return 0;
}

求n的阶乘:

//原理:n!=n*(n-1)!
#include<stdio.h>
int fac(int x)
{
    if(x<=1)
        return 1;
    else
        return x*fac(x-1);
}
int main()
{
    int n=0;
    int ret=0;
    scanf("%d",&n);
    ret=fac(n);
    printf("%d",ret);
    return 0;
}

求第n个斐波那契数:

//原理:n<=2时n=1,n>2时n=(n-1)+(n-2)
#include<stdio.h>
int fib(int x)
{
    if(x<=2)
        return 1;
    else
        return fib(x-1)+fib(x-2);
}
int main()
{
    int n=0;
    int ret=0;
    scanf("%d",&n);
    ret=fib(n);
    printf("%d",ret);
    return 0;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是个奇迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值