递推:知道第一个,推出下一个,直到达到目的。
为本溪等地区用户提供了全套网页设计制作服务,及本溪网站建设行业解决方案。主营业务为网站设计、成都做网站、本溪网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
递归:要知道第一个,需要先知道下一个,直到一个已知的,再反回来,得到上一个,直到第一个。
- -###
递归函数有两个基本要素:一个是描述问题规模逐步缩小的递归算法,另一个是描述基本情况的递归终止条件
int Sum(int n)
{
if(n==1)
return 1;
else
return Sum(n-1)+n;
}
//递归法
int fibo1(int n)
{
if( n == 1 || n == 2) return 1;
else return fibo1(n-1)+fibo1(n-2);
}
//递推法
int fibo2(int n)
{
int f0=1,f1=1,f;
if (n2)
return 1;
for(int i=2;in-1;i++)
{
f=f0+f1;
f0=f1;
f1=f;
}
return f;
}
区别:递推是直接使用已知的条件去推出未知的条件;递归则是将大问题逐渐转化为若干个相同的子问题,直到得到已知的最小子问题,再回溯依次得到父问题的答案。是由未知到已知,再从已知到未知。对于复杂的问题,递归把问题简单化,读起来易懂。
如题,输入的参数是7,调用fun(7),进入fun函数,if判断,此时x=7,if语句的condition为真,继续调用fun函数fun(3)(7/2取整为3),进入fun函数,if判断,此时x=3,if语句的condition为假,执行if语句后的输出语句,输出3(此时x=3),返回上一层的fun函数调用(即是fun(7),因为第一次调用时,还留这一句输出语句没有执行),输出7(此次fun函数调用x=7),主函数结束。函数执行的解析:程序的执行从主函数开始,一条一条语句执行,语句存放在一定的数据空间里,这段空间就是代码段,一般情况下程序是按代码的地址顺序执行的,但是在函数调用,程序会暂停当前的代码的执行,把下一条应该执行的代码的地址放在另一个存储空间里(其实是压进栈了),而转去执行调用的函数代码,执行完所有函数应该被执行代码(是所有哦,当然分支语句里的一些语句可以不执行的),程序会把压进栈的指令地址取出来,继续执行下去,直到住程序结束。递归函数是一般函数用分支或者循环控制多次重复调用函数的情况。
递推指的是一个函数中一个量的值要有其他的几个变量或函数得到,比如 function()是一个函数,在另一个函数里面要用到它时,如下 int add() {int a; a=function() }这就是递推。而递归指的是同一个函数的反复调用。比如去求一个数n的阶乘时int jiec(n) {int n; int m; m=n*jiec(n-1); return jiec(n-1); }
是用递归做的(是你的要求吧?):
#include
stdio.h
int
f(int
sum)
{
if(sum==10)
//第十天时就剩一个
return
1;
else
{
sum=sum+1;
return
2*f(sum)+1;
//其他时候都是俩倍加一
}
}
int
main()
{
printf("%d\n",f(1));
//从第一天开始的
return
0;
}