C语言学习(第二十课)初识函数5(函数递归2)

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<string.h>


//编写函数,不允许创建临时变量,求字符串长度
///1、可以使用临时变量的写法:
//int my_strlen(char* str)
//{
//    int count = 0;
//    while (*str != '\0')
//    {
//        count++;
//        str++;
//    }
//    return count;
//}


//2、不适用临时变量,使用递归的写法:

//int my_strlen(char* str)
//{
//    if (*str != '\0')
//        return 1 + my_strlen(str + 1);
// //这里不允许写成str++或++str。因为str++是先输出str再++。括号内的值会变成str++的值。结果是错误的。
//    else
//        return 0;
//}


//
// int main()
//{
//     char arr[] = { "hello world" };
//
//     //printf("%d\n", strlen(arr));//一般使用strlen函数求字符串长度。
//
//     printf("%d\n", my_strlen(arr));
//
//    return 0;
//}

//函数递归与迭代
//C语言中,循环语句也是一种迭代。

//计算n的阶乘:
//正常写法:使用循环语句

//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int i = 0;
//    int ret = 1;
//    for (i = 1;i <= n;i++)
//    {
//        ret = ret * i;
//    }
//    printf("%d\n", ret);
//    return 0;
//}

//使用递归写法:
//int Fac(int n)
//{
//    if (n <= 1)
//        return 1;
//    else
//        return n * Fac(n - 1);
//}
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int ret = Fac(n);
//    printf("%d\n", ret);
//    return 0;
//}

//求n的阶乘即可以使用递归,也可以使用迭代的方式进行计算。

//求第n个斐波那契数的值,不考虑溢出;
// 
// 1、使用公式直接套用到函数中,可以使用,但是效率特别低。如果n输入40,需要计算的次数为39088169次。
// 
// int count = 0;
// 
//int Fib(int n)
//{
//  if (n == 3)
//  count++;
//    if (n <= 2)
//        return 1;
//    else
//        return Fib(n - 1) + Fib(n - 2);
//}

//在函数中不使用递归,而是使用迭代的写法,会大大提高效率。(循环语句也是一种迭代)。
//int Fib(int n)
//{
//    int a = 1;
//    int b = 1;
//    int c = 1;
//    while (n < 2)
//    {
//        c = a + b;
//        b = a;
//        a = c;
//    }
//    return c;
//}
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int ret = Fib(n);
//    printf("%d\n", ret);
//    //printf("count = %d\n", count);
//    return 0;
//}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值