编写一个函数实现n^k,使用递归实现
#include <stdio.h>
int fun(int n,int k) //求n的k次方
{
int sum;
if (k==0)
{
sum=1;
}
else
{
sum=n*fun(n,k-1);
}
return sum;
}
int main ()
{
printf("%d\n",fun(2,3));
return 0;
}
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include <stdio.h>
int DigitSum(int n)
{
int sum=0;
int m=0;
if(n!=0)
{
m=n%10;
n=n/10;
sum=m+DigitSum(n);
}
return sum;
}
int main ()
{
int a;
printf("请输入一个整数: ");
scanf("%d",&a);
printf("各位数之和为:%d\n",DigitSum(a));
return 0;
}
编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中 的字符串操作函数。
#include <stdio.h>
char * reverse_string(char *p)
{
int n = 0;
char temp;
char *q;
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[] = "dandanwa";
printf("原字符串是:%s\n",p);
printf("翻转后的字符串是:%s\n",reverse_string(p));
return 0;
}
递归和非递归分别实现strlen
非递归
#include<stdio.h>
int my_strlen(char *str)
{
int count = 0;
while('\0' != *str)
{
count++;
str++;
}
return count;
}
int main()
{
char *str = "abcdef";
int len = my_strlen(str);
printf("%d\n", len);
return 0;
}
递归
#include<stdio.h>
int my_strlen(char *str)
{
if ('\0' == *str)
return 0;
else
return 1 + (my_strlen(str + 1));
}
int main()
{
char *str = "abcdef";
int len = my_strlen(str);
printf("%d\n", len);
system("pause");
return 0;
}
递归和非递归分别实现求n的阶乘
非递归
#include <stdio.h>
int fac(int n)
{
int ret = 1;
int i = 0;
for (i = 1; i <=n; i++)
{
ret = ret*i;
}
return ret;
}
int main()
{
int n = 0;
printf("请输入一个数:");
scanf_s("%d", &n);
int fac(n);
printf("%d\n", fac(n));
return 0;
}
递归
#include <stdio.h>
int fac(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n*fac(n - 1);
}
}
int main()
{
int n = 0;
printf("请输入一个数:");
scanf_s("%d", &n);
int fac(n);
printf("%d\n", fac(n));
return 0;
}
递归方式实现打印一个整数的每一位
#include <stdio.h>
void print(int n)
{
if (n>9)
{
print(n/10);
}
printf("%d ", n%10);
}
int main()
{
print(1234);
return 0;
}