运用递归函数解决一些实际问题

1.求“ABCDEF"字符串长度

思路:先把”ABCDEF"存起来,用指针变量指向第一个字符,判断第一个字符是否为‘\0’,是则返回0,否则返回从第一次开始的子母同时加1并使指针后移一位,进而继续判断,直到访问到最后一个字符‘\0’,停止返回给主函数则得到字符串的总个数。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
 char* str = "ABCDEF";//运用递归法求字符串长度
 int ret = my_strlen(str);
 printf("%d\n", ret);
 system("pause");
 return 0;
}
int my_strlen(const char* str)
{
 if (*str == '\0')
  return 0;
 else
  return 1 + my_strlen(1 + str);
}


2.求 n的阶乘:

思路:n!=n(n-1)(n-2)(n-3)....3*2*1;n=1,1

若要求1个及以下的数,直接返回1,否则则返回n(n-1);

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

int main(){//用递归法求解n!;
 int n=0;
 scanf("%d", &n);
 int ret=fun(n);
 printf("%d\n", ret);
 system("pause");
 return 0;
}
int fun(int n)
{
 if (n <= 1)
  return 1;
 else
  return n*fun(n - 1);
}

3.斐波那节数

1,1,2,3,5,8,11即前两个数的和为第三个数

分析:

如果求两个及以下的数,直接返回1;如果求3个及以上的数,则返回(n-1)+(n-2);

#include<stdio.h>
#include<stdlib.h>
int main()
{//用递归法求解斐波那阶数
 int ret = fib(2);
 printf("%d\n", ret);
 system("pause");
 return 0;
}
int fib(int n)
{
 if (n <= 2)
  return 1;
 else
  return fib(n - 1) + fib(n - 2);


}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值