C语言之函数的递归

发布时间:2024年01月11日

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//最简单的递归
int main()
{
?? ?printf("hehe\n");
?? ?main();
?? ?return 0;
}

//练习1:接受一个整型值,按顺序打印它的每一位
//例如:输入1234 ?输出 1 2 3 4

#include<stdio.h>
void print(int n)
{
?? ?if (n > 9)
?? ?{
?? ??? ?print(n/10);
?? ?}
?? ?printf("%d ", n % 10);
}

int main()
{
?? ?int num = 0;
?? ?scanf_s("%d", &num);
?? ?print(num);
?? ?return 0;
}

//练习2:编写函数不允许创建临时变量,求字符串的长度

#include<stdio.h>
//有创建了临时变量count
int my_strlen(char* str)
{
?? ?int count = 0;
?? ?while (*str != '\0')
?? ?{
?? ??? ?count++;
?? ??? ?str++;
?? ?}
?? ?return count;
}
//函数递归的方法
//把大事化小
//my_strlen("bit")'
//1+my_strlen("it");
//1+1+my_strlen("t");
/1/+1+1+my_strlen("")
//1+1+1+0
//3
int my_strlen(char* str)
{
?? ?if (*str != '\0')
?? ??? ?return 1 + my_strlen(str + 1);
?? ?else
?? ??? ?return 0;
}

int main()
{
?? ?char arr[] = "bit";
?? ?int len = my_strlen(arr);//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址
?? ?printf("%d\n", len);
?? ?return 0;
}

//练习3:求n的阶乘

#include<stdio.h>
Fac1(int i)
{
?? ?int j = 0;
?? ?int ret = 1;
?? ?for (j = 1; j <= i; j++)
?? ?{
?? ??? ?ret *= j;
?? ?}
?? ?return ret;
}
int Fac2(int n)
{
?? ?if (n <= 1)
?? ??? ?return 1;
?? ?else
?? ??? ?return n * Fac2(n - 1);
}
int main()
{
?? ?int i = 0;
?? ?
?? ?scanf_s("%d", &i);
?? ?/*int ret=Fac1(i);*///循环的方式
?? ?int ret = Fac2(i);
?? ?printf("%d ", ret);
?? ?return 0;
}

//练习4:求第n个斐波那契数

#include<stdio.h>
Fib(int n)//递归的方式 但求第50个数的时候受限
{?
?? ?if (n <= 2)
?? ??? ?return 1;
?? ?else
?? ??? ?return Fib(n - 1) + Fib(n - 2);
}
Fib(int n)//循环的方式
{
?? ?int a = 1;
?? ?int b = 1;
?? ?int c = 1;
?? ?while (n > 2)
?? ?{
?? ??? ?c = a + b;
?? ??? ?a = b;
?? ??? ?b = c;
?? ??? ?n--;
?? ?}
?? ?return c;
}
int main()
{
?? ?int n = 0;
?? ?int ret = 0;
?? ?scanf("%d", &n);
?? ?TDD - 测试驱动开发
?? ?ret = Fib(n);
?? ?printf("%d", ret);
?? ?return 0;
}

文章来源:https://blog.csdn.net/2301_80300263/article/details/135533294
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。