函数的递归调用

1.递归和非递归分别实现求第n个斐波那契数。

#include <stdio.h>
#include<stdlib.h>
int fab(int n)
{
	int a = 1;
	int b = 1;
	int c = 0;
	if (n <= 2)
		return 1;
	while (n >2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}//非递归
int fib(int n)
{
	if (n <= 2)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);
}//递归

int main()
{
	int x=0 ;
	scanf_s("%d\n", &x);
	printf("%d\n", fab(x));
	printf("%d\n", fib(x));
	system("pause");
}

2.编写一个函数实现n^k,使用递归实现

#include <stdio.h>
#include<stdlib.h>
	int mi(int n,int k)
{
	if (k==0)
	return 1;
	 else if (k==1)
	return n;
	else 
	renturn mi( n,k-1)*mi(n,1);
	}
int main()
{
int x = 2;
int y = 3;
printf("%d\n",mi(x ,y));
system("pause");
}
  1. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
    例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include <stdio.h>
#include<stdlib.h>
int DigitSum(int n)
{
	if (n<10)
	return n;
	else if (n >= 10 && n<100)
	{
		int a = 0;
		int b = 0;
		a = n / 10 % 10;
		b = n % 10;
		return  a + b;
	}
	else
		return DigitSum(n / 10) + n % 10;
}
int main()
{
	int n = 1729;
	printf("%d\n",DigitSum(n));
	system("pause");
}
  1. 编写一个函数 reverse_string(char * string)(递归实现)
    实现:将参数字符串中的字符反向排列。
    要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h>
#include<stdlib.h>
#include <stdio.h>
#include<stdlib.h>
char * reverse_string(char *p){
	int n = 0;
	char temp;
	char *q;
	q = p;
	while (*p != 0){
		n++;
		p++;
	}
	if (n > 1)
	{
		temp = q[0];
		q[0] = q[n - 1];
		q[n - 1] = '\0';
		reverse_string(q + 1);
		q[n - 1] = temp;
	}
	return q;
}

int main()
{
	char p[] = "abcd";
	printf("原字符串是:%s\n", p);
	printf("翻转后的字符串是:%s\n", reverse_string(p));
	system("pause");
	return 0;
}

5.递归和非递归分别实现strlen .

#include <stdio.h>
#include<stdlib.h>
int longe(char *str)
{
int count = 0;
	while (*str != 0)
{
	count++;
	str++;
	}
	return count;
}
//非递归
int string(char*x)
{
	int count = 0;
    if (*x != 0)
{
	count = 1 + string(x+1);
}
	return  count;
}
int main()
{
	char a[] = "abcde";
	printf("%d\n", longe(a));
	printf("%d\n", string(a));
	system("pause");
}

6.递归和非递归分别实现求n的阶乘

#include <stdio.h>
#include<stdlib.h>
int fac(int n)
{
	int a = 1;
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	else
	
	for (int i = 1; i <= n; i++)
	{
	   a = a*i;
	}
	  return a;
}//非递归
int fac1(int n)
{
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	else
		return  n* fac(n - 1);
}//递归
int main()
{
	int n = 3;
	scanf_s("%d\n", &n);
	printf("%d\n", fac(n));
	printf("%d\n", fac1(n));
	system("pause");
	}

7.递归方式实现打印一个整数的每一位

#include <stdio.h>
#include<stdlib.h>
int out(int n)
{
	if (n<10)
		printf("%d\n",n);
	else if (n >= 10)
	{
		out(n / 10);
		printf("%d\n", n % 10);
	}
}
int main()
{
    printf("请输入一个数\n");
	int a = 0;
	scanf_s("%d",&a);
     out(a);
	system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值