C语言一个简单递归的实现
问题的引入
在初中或高中数学问题中会遇到这样的问题,已知f(0) = 1,f(n) = f(n-1)+n (n>=0 且为正整数);求f(3)或放f(n),这样的问题。这实质上就是一个递归问题。
解法如下:
f(3) = f(2) + 3 要求f(3),需要f(2)
f(2) = f(1) + 2 同理f(1)
f(1) = f(0) +1 已知
f(0) = 1
==>f(0) ==>f(1) =>f(2) ==>f(3) = 7
同理f(n)。
c语言实现
下面展示一些 内联代码片
。
#include <stdio.h>
static int recursion(int n)
{
int ret;
if(n == 0)
return 1;
else{
ret = recursion(n-1)+ n;
n--;
return ret;
}
}
int main(void)
{
printf("recursion(3)=%d\n",recursion(3));
return 0;
}
编译运行结果如下
recursion(3)=7
阶乘的定义&实现
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
亦即n!=1×2×3×…×(n-1)n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
代码实现
#include <stdio.h>
#include <stdlib.h>
static int recursion(int n)
{
int ret;
if(n == 0)
return 1;
else{
ret = recursion(n-1)*n;
n--;
return ret;
}
}
int main(int argc ,char *argv[])
{
if(argc < 2){
printf("please enter a number (n!)\n");
return -1;
}
printf("recursion(%s)=%d\n",argv[1],recursion( (atoi(argv[1]))));
return 0;
}
输入参数5得到
recursion(5)=120
以上就是对递归的简单认知和功能代码的基本实现,如有不正确的地方欢迎指正!