1.递归和非递归分别实现求第n个斐波那契数。
斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*) 。
方法一:递归实现斐波那契数列
#include<stdio.h>
#include<windows.h>
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int res = Fib(6);
printf("第六个斐波那契数为:%d\n", res);
system("pause");
return 0;
}
方法二:迭代实现斐波那契数列
#include<stdio.h>
#include<windows.h>
int Fib(int n)
{
int first = 1;
int second = 1;
int third = 1;
while (n > 2)
{
third = first + second;
first = second;
second = third;
n--;
}
return third;
}
int main()
{
int res=Fib(6);
printf("第六个斐波那契数为:%d\n", res);
system("pause");
return 0;
}
运行结果:
2.编写一个函数实现n^k,使用递归实现
#include<stdio.h>
#include<windows.h>
int Find_num(int n, int k)
{
if (k == 0)
return 1;
if (k == 1)
return n;
else
return n * Find_num(n, k - 1);
}
int main()
{
int n, k;
printf("请输入底数n:\n");
scanf_s("%d", &n);
printf("请输入指数k:\n");
scanf_s("%d", &k);
int find_num = Find_num(n, k);
printf("n^k的结果为:%d", find_num);
printf("\n");
system("pause");
return 0;
}
运行结果:
3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 。
#include<stdio.h>
#include<windows.h>
int DigitSum(int x)
{
if (x < 10)
return x;
else
return (x % 10 + DigitSum(x / 10));
}
int main()
{
int n = 1729;
int ret = DigitSum(n);
printf("返回组成它的数字之和为:%d\n", ret);
system("pause");
return 0;
}
运行结果:
4. 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#include<stdio.h>
#include<windows.h>
int reverse_string(char * string) {
if (*string != '\0') { //判断string中ASCII值是否为0,在C语言中以'\0'作为结束字符
string++; //一直向后进行统计元素
reverse_string(string);
printf("%c", *(string - 1)); // string-1指字符串中从最后一个元素输出
}
return 0;
}
int main() {
char string[] = "abced";
reverse_string(string);
system("pause");
return 0;
}
运行结果:
5.递归和非递归分别实现求n的阶乘
#include<stdio.h>
#include<windows.h>
int Factorial_r(int num)
{
//非递归实现
int k = 1;
while (num > 0)
{
k *= num--;
}
return k;
}
int Factorial(int num)
{
//递归实现
return num > 0 ? num * Factorial(num - 1) : 1;
}
int main()
{
int n = 0;
printf("请输入一个数,求它的阶乘:\n");
scanf_s("%d", &n);
printf("递归实现的阶乘为:%d\n", Factorial(n));
printf("非递归实现的阶乘为:%d\n", Factorial_r(n));
system("pause");
return 0;
}
运行结果:
6.递归方式实现打印一个整数的每一位 。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int num = 1234;
print(num);
system("pause");
return 0;
}
运行结果: