您的位置:首页 > 其它

递归

2018-03-08 14:12 246 查看
1。

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

#include <stdio.h>
#include <assert.h>
#pragma warning(disable:4996)
int Fib_1(int size)
{
assert(size);
if(size<=2)
{
return 1;
}
return Fib_1(size-1)+Fib_1(size-2);
}

int Fib_2( int size)
{
int i = 2;
int data = 1;
int num = 1;
int tmp = 1;
assert(size);
if(size <= 2)
{
return 1;
}
for(i=2;i<size;i++)
{
data=tmp+num;
tmp=num;
num=data;
}
return data;

}

int main()
{
int size,data;
scanf("%d",&size);
data = Fib_2(size);
printf("%d ",data);
return 0;
}


2。

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

#include <stdio.h>
#pragma warning(disable:4996)

unsigned int Fac_1(unsigned int size)
{
if(size<=1)
{
return 1;
}
return Fac_1(size-1) * size;
}

unsigned int Fac_2( unsigned int size)
{
int i = 2;
int data = 1;
if(size <= 1)
{
return 1;
}
for(i=2;i<=size;i++)
{
data*=i;
}
return data;

}

int main()
{
unsigned int size,data;
scanf("%d",&size);
data = Fac_2(size);
printf("%d ",data);
return 0;
}


3。

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

#include <stdio.h>
#pragma warning(disable:4996)

long long find_Power(unsigned int num,unsigned int power)
{
if(num<=1 || power == 0)
{
return 1;
}
return find_Power(num,power-1)*num;

}
int main()
{
unsigned int num;
unsigned int power;
long long data;
scanf("%d%d",&num,&power);
data = find_Power(num,power);
printf("%lld\n",data);
return 0;
}


4。

递归和非递归分别实现strlen 。



#include <stdio.h>
#pragma warning(disable:4996)

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

int my_strlen_1(char *str)
{
int count = 0;
while(*str++)
{
count++;
}
return count;

}
int main()
{
char str[]="abcde1234";
//char str[]="";//0
int data;
data = my_strlen_1(str);
printf("%d\n",data);
return 0;
}


5。

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。



#include <stdio.h>
#pragma warning(disable:4996)

int DigitSum(int data)
{
if(data<=9)
{
return data;
}
return DigitSum(data/10)+data%10;
}

int main()
{
int data = 1729;
int sum;
sum = DigitSum(1729);
printf("%d\n",sum);
return 0;
}


6。

编写一个函数reverse_string(char * string)(递归实现)

实现:将参数字符串中的字符反向排列。

要求:不能使用C函数库中 的字符串操作函数。

#include <stdio.h>
#pragma warning(disable:4996)

void Reverse_str(char *str)
{
if('\0'== *str)
{
return ;
}
Reverse_str(str+1);
printf("%c ",*str);
}

int main()
{
char str[]="abcd1234";
Reverse_str(str);
return 0;
}


7。

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

#include <stdio.h>
#pragma warning(disable:4996)

void my_printf(int num)
{
if(num<9)
{
printf("%d ",num);
return num;
}
my_printf(num/10);
printf("%d ",num%10);
}

int main()
{
int num;
scanf("%d",&num);
my_printf(num);

return 0;
}


宏(题)

http://blog.csdn.net/romantic_c/article/details/79451028

位&翻转_1(题)

http://blog.csdn.net/romantic_c/article/details/79455583

位&翻转_2(题)

http://blog.csdn.net/romantic_c/article/details/79476849
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息