函数递归

256 阅读3分钟

1.斐波那契数列

中第n 项的值。从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,
21,……,例如,若给n 输入7,该项的斐波拉契级数值为13。*/

#include < stdio.h >

//分析
//1. 明确什么是斐波那契数列 
//2. 通过给出的案例看出 1(n=1),1(n=2),2(n=3),3(n=3),5(n=5),8(n=6),13(n=7), 21(n=8)
//    规律 斐波那契数列的规律
//   (1) 如果 n = 1 或者 n = 2 , 斐波那契数 就是 1
//   (3) 如果 n > 2 则 斐波那契数 = 前一个斐波那契数  + 前一个的前一个斐波那契数
// 3. 空格1  如果 n = 1 或者 n = 2 , 斐波那契数 就是 1, 所以填写  case 2
// 4. 空格2  (fun(g-1) + fun(g-2)
// 5 空格3  用于接收一个输入  填写 &n
long fun(int g)
{ switch(g){
case 0: return 0;
case 1: case 2: return 1;
}
// n > 2 则 斐波那契数 = 前一个斐波那契数  + 前一个的前一个斐波那契数
return (fun(g-1) + fun(g-2));
}
main()
{ long fib; int n;
printf("Input n:"); scanf("%d",&n);
printf("n=%d\n",n);
fib=fun(n);
printf("fib=%d\n\n", fib);
getchar();
getchar();
}

2.

fun(n)=10 (n=1),fun(n)=fun(n-1)+2 (n>1) 例如,当给n 输入5 时,函数
值为18;当给n 输入3 时,函数值为14。 请改正程序中的错误,使它能得出正确
结果。 注意:不要改动main 函数。*/
#include < stdio.h >
//分析
//1. 需要阅读源代码
//2. 错误1 if (n=1) 这里应该是判断 n == 1 , 而不是 赋值 ,应该改成  n == 1 即可
int fun(int n)
{ int c;
if (n=1)
c=10;
else
c=fun(n-1)+2;
return(c);
}
main()
{ int n;
printf("Enter n:"); scanf("%d",&n);
printf("The result:%d\n\n", fun(n));
getchar();
getchar();
}

这两个题都考察了对函数递归的理解,递归法是算法的一种

递归算法是把问题转化成规模更小的同类子问题,先解决子问题,再通过相同的求解过程逐步解决更高层次的问题,最终获得最终的解。所以相较于递推而言,递归算法的范畴更小,要求子问题跟父问题的结构相同。而递推思想从概念上并没有这样的约束。

用一句话来形容递归算法的实现,就是在函数或者子过程的内部,直接或间接的调用自己算法。所以在实现的过程中,最重要的是确定递归过程终止的条件,也就是迭代过程跳出的条件判断。否则,程序会在自我调用中无限循环。


摘抄来自---作者:寒草
链接:juejin.cn/post/702131… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3.

Screenshot_20211023_203412.jpg 捋清递归的过程和输出顺序才是关键