递归和非递归分别实现求第n个斐波那契数:
#include<stdio.h>
int Fib1(int n)
{
int num = 0;
int ppre_num = 1;
int pre_num = 1;
while (n > 2)
{
num = pre_num + ppre_num;
ppre_num = pre_num;
pre_num = num;
n--;
}
return num;
}
int Fib2(int n)
{
if (n <= 2)
return 1;
else
return Fib2(n - 1) + Fib2(n - 2);
}
int main()
{
int n = 0;
int ret1 = 0;
int ret2 = 0;
printf("请输入fib位数\n");
scanf("%d", &n);
ret1 = Fib1(n);
ret2 = Fib2(n);
printf("迭代方法\n");
printf("Fib1= %2d \n", ret1);
printf("递归方法\n");
printf("Fib2= %2d \n", ret2);
return 0;
}
编写一个函数实现n^k,使用递归实现:
#include<stdio.h>
int Pow(int n, int k)
{
if (k == 0)
return 1;
else
return n*Pow(n, k - 1);
}
int main()
{
int n = 0;
int k = 0;
int ret = 0;
printf("输入n和次数k\n");
scanf("%d%d", &n, &k);
ret = Pow(n, k);
printf("%d", ret);
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 n;
printf("请输入一个整数:\n ");
scanf("%d", &n);
printf("各位数之和为:%d\n", DigitSum(n));
return 0;
}
编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数
#include <stdio.h>
void reverse_string(char * string)
{
if (*string == '\0')
{
return;
}
if (*string != '\0')
{
reverse_string(string+1);
printf(" %c ", *string);
}
}
int main()
{
char s[] = "abcdefgh";
reverse_string(s);
printf("\n");
return 0;
}
递归和非递归分别实现strlen
#include<stdio.h>
int Strlen(char *arr)
{
if (*arr == '\0')
{
return 0;
}
else
{
return Strlen(arr+1) + 1;
}
}
int main()
{
char arr[100];
printf("Please input :\n");
scanf("%s", arr);
printf("%d\n", Strlen(arr));
return 0;
}
递归和非递归分别实现求n的阶乘
#include<stdio.h>
int Fac1(int n)
{
if ((n == 0) || (n == 1))
{
return 1;
}
else
{
return n*Fac1(n - 1);
}
}
int Fac2(int n)
{
int value = 1;
int k = 0;
if ((n == 0) || (n == 1))
return 1;
else
{
for (k = n; k > 1; k--)
{
value *= k;
}
return value;
}
}
int main()
{
int n=0;
printf("输入N :\n");
scanf("%d", &n);
printf("递归方法: %d\n", Fac1(n));
printf("非递归方法: %d\n", Fac2(n));
return 0;
}
递归方式实现打印一个整数的每一位
#include <stdio.h>
void Printf(int num)
{
if (num > 9)
{
Printf(num / 10);
}
printf(" %d ", num % 10);
}
int main()
{
int num = 0;
scanf("%d", &num);
Printf(num);
return 0;
}