请问递归可以理解为高级循环么。

weixin_45895204 2019-12-02 08:03:09
刚学20天java,请问大佬递归能代替循环么。还有我会用循环做99乘法表。递归怎么做出99乘法表。暂时只会用递归做阶乘
...全文
200 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
狗蛋丶 2019-12-04
  • 打赏
  • 举报
回复
你可以用while循环和栈Stack来手写递归。 因为递归的底层就是这么干的。 讲道理,实际工作中如果不是高级造轮子的活,递归用的很少,最多的可能是让你组一个部门树结构。 但是如果你学算法,做算法题,这玩意就是吃饭喝水。
树成 2019-12-04
  • 打赏
  • 举报
回复
不可以,两种不同的算法不能混淆,虽然它们的功能上有些兼容,但是实际处理的问题是不一样的。
  • 打赏
  • 举报
回复
如下情况如何使用循环呢

/**
* 打印0-9长度为 MAX_LEN 的所有组合
*/
private final static int MAX_LEN = 2;

private static int[] result = new int[MAX_LEN];

private static int[] check = new int[10];

public static void main(String[] args) {
dfs(0);
}

private static void dfs(int currentLen){
if (currentLen == MAX_LEN) {
print();
return;
}
for (int i = 0; i < 10; i++) {
if (check[i] == 0){
check[i] = 1;
result[currentLen] = i;
dfs(currentLen + 1);
check[i] = 0;
}
}
}

private static void print() {
for (int i : result){
System.out.print(i);
}
System.out.println();
}
jiawenhe123 2019-12-03
  • 打赏
  • 举报
回复
如果递归可以实现尾递归消除,那么递归就不存在栈帧溢出的情况。分治算法一般都可以用递归实现。 循环更加灵活和可读,如果可以用循环解决,尽量用循环。 递归并不是更高级的循环,而是更深的自我调用序列。 这样只有多实践,遇到场景了才能更深刻的体会。
  • 打赏
  • 举报
回复
引用 7 楼 weixin_45895204 的回复:
请问怎么用循环做出这么一道题,前两项之和为第三项,求第n项的和。递归是add(n-1)+add(a-2)(我不确定哈哈昨天刚学,有点印象)。
斐波那契数列,百度一下一堆代码,有递归也有循环
weixin_45895204 2019-12-02
  • 打赏
  • 举报
回复
请问怎么用循环做出这么一道题,前两项之和为第三项,求第n项的和。递归是add(n-1)+add(a-2)(我不确定哈哈昨天刚学,有点印象)。
weixin_45895204 2019-12-02
  • 打赏
  • 举报
回复
感谢各位的解答了解了下递归
  • 打赏
  • 举报
回复
相对来说,递归比较难以理解,消耗很大,比如循环来的简单直接而且快。
zhtoad 2019-12-02
  • 打赏
  • 举报
回复
我觉得递归就是教科书上让你理解函数调用的。在求职面试的时候拿来耍人的。 真的没有必要用递归。 递归就是函数调用,就是调用开销。效率真不怎么好。
qq_39936465 2019-12-02
  • 打赏
  • 举报
回复
我觉得递归并不能完全替换循环,简单的程序可以用递归,但是递归是导致程序的复杂性,所以没有必要深入研究递归。
亦夜 2019-12-02
  • 打赏
  • 举报
回复
可以代替,但是他们的思想不一样,并且递归每调用一次都会形成栈侦,一定次数以后会造成栈内存溢出,所以可以但没必要
qq_39936465 2019-12-02
  • 打赏
  • 举报
回复
引用 7 楼 weixin_45895204 的回复:
请问怎么用循环做出这么一道题,前两项之和为第三项,求第n项的和。递归是add(n-1)+add(a-2)(我不确定哈哈昨天刚学,有点印象)。

public class test7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int x1=1;
		int x2=1;
		int x3=0;
		Scanner  sc=new Scanner(System.in);
		System.out.println("请输入斐波那契数列项:");
		int n=sc.nextInt();
		for(int i=3;i<=n;i++) {
			x3=x1+x2;
			x1=x2;
			x2=x3;
		}
		System.out.println("入斐波那契数列项第"+n+"项值为:"+x3);
	}
}


SZ深呼吸 2019-12-02
  • 打赏
  • 举报
回复
循环像是一个正圆,递归像一个蜗牛壳或是螺旋状的棒棒糖

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧