龙空技术网

编程|理解递归关键在于理解递归表达式和代码的执行顺序

小智雅汇 298

前言:

今天各位老铁们对“递归函数逆序输出一串数字”大概比较注意,朋友们都需要知道一些“递归函数逆序输出一串数字”的相关知识。那么小编也在网摘上汇集了一些关于“递归函数逆序输出一串数字””的相关文章,希望看官们能喜欢,大家快快来了解一下吧!

递归表达式用于描述每一次递归之间的相互关系及递归函数参数的收敛。递归由参数的变化形成反复调用,直到递归的边界条件,然后回归。

递归代码的执行顺序可区分整体顺序与递归函数内部的代码顺序。

整体顺序根据递归调用自己的次数区分,如果只调用自己一次,称为线性递归,如计算阶算。如果有调用自己两次,称为树型递归,如计算斐波那契数列。

递归函数内部的代码顺序以递归调用自己的语句为基准,递推调用时,顺序执行此语句前面的语句,回归时,顺序执行此语句后面的语句,如十进制数输出为二进制显示:

#include <iostream>using namespace std;int up = 0;void to2(int n){	if(n==0)		return;	else	{		printf("up%d ",++up);		to2(n/2);	}	printf("%d ",n%2);}void main(){	to2(6); system("pause");}

输出:

up1 up2 up3 1 1 0

如果输出表达式printf("%d ",n%2);写在递归表达式之后,则形成逆序输出110。(如果输出表达式写在递归表达式之前,则形成顺序输出011。)

递归求斐波那契数,递归函数中会调用自己两次,整体会形成树型递归顺序:

#include <iostream>using namespace std;int fib(int n);int main(){ int i =fib(5);	cout<<i<<endl; cin.get(); return 0;}int fib(int n){ cout << "n=" << n << " ";	if(n==1 || n==2)		return 1;  else	{		int i = fib(n-1);		cout<< "i=" << i<<endl;		int j = fib(n-2);		cout<< "j=" << j <<endl;		return i+j;	}}

输出:

n=6 n=5 n=4 n=3 n=2 i=1n=1 j=1i=2n=2 j=1i=3n=3 n=2 i=1n=1 j=1j=2i=5n=4 n=3 n=2 i=1n=1 j=1i=2n=2 j=1j=38

递归函数内部局部的代码顺序以递归调用自己的语句为基准,递推调用时,顺序执行此语句前面的语句:

-End-

标签: #递归函数逆序输出一串数字