递归小程序

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

非递归实现

1.创建一个一维数组,并定义第一个和第二个元素为1,。

2.然后其余元素为他之前的两个元素之和,从第三个元素开始一直计算到第n个数

3.如果n<3,那么直接返回1,当n>=3时,返回数组下标为n-1的元素

#include<stdio.h>
#define N 100
int ASD(int *arr, int x)
{

	int i = 2;
	if(x<3)
	{
		return 1;
	}
	while(i < x)
	{
		arr[i] = arr[i-1]+arr[i-2];
		i++;
	}
	return arr[i-1];
}

int main()
{
	int a[N] = {1,1};
	int n = 0;
	int c = 0;
	scanf("%d", &n);
	c = ASD(a,n);
	printf("%d", c);
	return 0;
}

递归实现

#include<stdio.h>
#include<stdlib.h>

int Asd(int x)
{
	if(x <= 2)
	{
		return 1;
	}
	else
	{
		return Asd(x-1)+Asd(x-2);
	}
}

int main()
{
	int a = 0;
	int n = 0;
	scanf("%d", &n);
        a = Asd(n);
	printf("%d", a);
	system("pause");
	return 0;
}

2.用递归实现n 的k次方

#include<stdio.h>
#include<stdlib.h>

int Power(int n, int k)
{
	if(k==1)
		return n;
	else
	    return n*Power(n, k-1);
}

int main()
{
     int x = 0;
	 int y = 0;
	 int z = 0;

	 printf("请输入一个数\n");
	 scanf("%d", &x);
	 printf("请输入这个数的次方数\n");
	 scanf("%d", &y);
	 z = Power(x, y);
	 printf("%d\n", z);
     
	 system("pause");
	 return 0;
}

3.递归计算一个非负整数的每一位相加之和,比如调用1234,输出为1+2+3+4=10

#include<stdlib.h>
#include<stdio.h>

int Sum(int n)
{
    if(n == 0)
		return 0;
	else
		return n%10+Sum(n/10);
}

int main()
{
	int x = 0;
	int y = 0;
	printf("请输入一个数\n");
	scanf("%d", &x);
        y = Sum(x);
	printf("%d\n", y);

	system("pause");
	return 0;
}

4.递归实现将一个字符串反向排列(不能使用c库函数中的字符串操作函数)

#include<stdio.h>
#include<stdlib.h>

int n_strlen(char arr[])//计算字符串个数
{
	int i = 0;
	do
	{
		i++;
	}while(arr[i]);
	return i-1;
}
int gui(char *b)
{
	if(*b == '\0')
	{
		return 0;
	}
	else
	{
		int c = n_strlen(b);
        char a = *b;
		*b = *(b+c);
		*(b+c) = '\0';
		gui(b+1);
		*(b+c) = a;       
	}
	return 0;
}

int main()
{
    char a[] = "ASDFGHJK";
	int s = strlen(a);
	gui(a);
	printf("%s", a);

	system("pause");
	return 0;
}

5.用递归和非递归实现strlen

递归实现

#include<stdlib.h>
#include<stdio.h>

int My_strlen(char *a)
{
	if(*a == '\0')
		return 0;
	return 1+My_strlen(a+1);
}

int main()
{
	int i = 0;
	char a[] = "ASDFGHJK";
	i = My_strlen(a);
	printf("%d\n", i);
	system("pause");
	return 0;
}

非递归实现

#include<stdlib.h>
#include<stdio.h>

int My_strlen(char *a)
{
	int i = 0;
	while(a[i] != '\0')
	{
		i++;
	}
	return i;
}

int main()
{
	int s = 0;
	char a[] = "ASDFGHJK";
    s = My_strlen(a);
	printf("%d\n", s);
	system("pause");
	return 0;
}

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

递归实现

#include<stdio.h>
#include<stdlib.h>

int C(int s)
{
	if(1 == s)
	{
		return 1;
	}
	else
	{
		return s*C(s-1);
	}
}

int main()
{
	int n = 0;
	int a = 0;
	printf("请输入一个数\n");
	scanf("%d", &n);
	a = C(n);
	printf("%d的阶乘为%d", n, a);
	system("pause");
	return 0;
}

非递归实现

#include<stdio.h>
#include<stdlib.h>

int main()
{
        int n = 0;
	int i = 0;
	int x = 1;
	printf("请输入一个数\n");
	scanf("%d", &n);
        for(i = 1; i <= n; i++)
	{
		x = x*i;  
	}
	printf("%d\n", x);

	system("pause");
	return 0;
}

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

#include<stdio.h>
#include<stdlib.h>

void A(int n)
{
	if(n > 9)
		A(n/10);
	printf("%d ", n%10);
}

int main()
{
	int x = 0;
	printf("请输入一个数\n");
    scanf("%d", &x);
    A(x);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ksaila/article/details/80207461