首先我们需要了解递归是什么
程序调用自身就叫做递归。
要进行递归的算法时 我们应该从以下几点进行考虑
1.首先去找临界值,即无需计算,获得的值。
2. 找这一次和上一次的关系
3. 假设当前函数已经可以使用,调用自身计算上一次和这一次的关系。
下面我们从一些简单的代码来对递归进行一些深入的了解!
1. 斐波那契数列的两种算法
#include<stdio.h>
#include<stdlib.h>
//斐波那契数列不同计算方法
//1,1,2,3,5,8
//递推
int fab1(int n)
{
if (n==1||n==2)
{
return 1;
}
return fab1(n-1) + fab1(n-2);
}
//循环
int fab2(int n)
{
int a;
int s;
int z;
a = 1;
s = 1;
for (int i=2;i<n;i++)
{
if (n==2||n==1)
{
s = 1;
}
else
{
z = a + s;//2
a = s;//1
s=z;//2
}
}
return s;
}
int main()
{
int fab2(int n);
int a = 0;
a=fab2(6);
printf("%d", a);
system("pause");
return 0;
}
2.求n^k的阶乘 如果k大于一的话 那么久进入 n(n,k-1) 的函数*
#include<stdio.h>
#include<stdlib.h>
//求n^k! 意思就是 k个n相乘
// 思路 如果k大于一的话 那么久进入 n*(n,k-1) 的函数
int mypow(int n, int k)
{ //传进参数 n和k
if (k == 1)
{ //如果k等于1的时候就返回一个n;
return n;
}
return n * mypow(n, k - 1); //开始递归
}
//n^k k个n相乘;
int com(int n, int k)
{
int c = 0;
if (k==1)
{
c=n;
}
c= n * com(n, k - 1);
return c;
}
int main()
{
int a = com(2, 4);
printf("%d\n", a);
system("pause");
return 0;
}
3.将一个整数的每一位输出
#include<stdio.h>
#include<stdlib.h>
//思路 取模得到末位 对十取余得到除去末位其他位
int summ(int n)
{
int sum = 0;
if (n!=0)
{
int last = n % 10;
int other = n / 10;
sum = last + summ(n/10);
}
return sum;
}
int main()
{
int summ(int n);
int a = 90;
printf("%d", summ(a));
system("pause");
return 0;
}
不论是什么语言,都是由循环 选择 递归等一些基础原知识来组成的
万丈高楼平地起!学好了这些才能在今后的学习中更加的游刃有余!