| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2360 人关注过本帖
标题:新手求教,请问递归进行双递归应该怎么理解
只看楼主 加入收藏
lidepeng1995
Rank: 2
等 级:禁止访问
帖 子:30
专家分:43
注 册:2018-7-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
新手求教,请问递归进行双递归应该怎么理解

#include <stdio.h>

int fibonacci(int count)
{
    if (count == 0)
        return 0;
    if (count == 1)
        return 1;
    return fibonacci(count-1) + fibonacci(count-2);//这点看的懵逼,请大神赐教
}
viod main()
{
    for (int count=0; count < 13; ++count)
        printf( "%d  ",fibonacci(count) );

    return 0;
}

搜索更多相关主题的帖子: return int fibonacci count 递归 
2020-03-19 13:08
Sv少
Rank: 3Rank: 3
来 自:山东青岛
等 级:论坛游侠
威 望:1
帖 子:53
专家分:168
注 册:2011-11-7
收藏
得分:0 
第一次就当做树根 ,然后每次往左分树枝,count == 0或1是树枝末端,每向上一节就把给直接的左边树枝补全。就是二叉树

Sv少  run
2020-03-19 13:26
lidepeng1995
Rank: 2
等 级:禁止访问
帖 子:30
专家分:43
注 册:2018-7-8
收藏
得分:0 
回复 2楼 Sv少
谢谢大佬的回复,不过您讲的太深奥了,不明白就打count=4,是怎么个入建出建的过程
2020-03-19 13:34
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
你这个,会运行超时,如果掌握了桶的话可以减少计算

2020-03-19 19:10
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:4 
这个剪枝很简单:
程序代码:
#include<bits/stdc++.h>
using namespace std;
int x[10010]={0};
int f(int n){
    if(n<=1)return 1;
    if(x[n]!=0){
        return x[n];
        
    }
    x[n]=f(n-1)+f(n-2);
    return f(n-1)+f(n-2);
} 
int main(){
    int n;
    cin>>n;
    cout<<f(n);
    return 0;
}

对照代码就行了

2020-03-19 19:12
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1696
专家分:4295
注 册:2007-12-27
收藏
得分:4 
大多数情况下,递归就是数学归纳法,所以回去深刻理解数学归纳法吧,再抽空从哲学高度总结一下。
回来以后递归就都不算事儿了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-19 19:14
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
回复 楼主 lidepeng1995
当然,你初学算法肯定会懵的,我也一样,递归这个东西,说白了就是函数套用函数自身,本身其实是一种基础的算法结构,到了后面,你会学到更多琐碎的算法,如深搜和广搜,都用到了递归结构。当然,在没有return的情况下,这个函数理所当然可以多次套用自身。
还有,桶这个东西最多就是用来剪枝,避免运行超时,否则你的这一段代码,面向大多数更多的题目数据,应该会超时,这也是我第一次写这个代码时所犯的错误。希望上面内容对你有用。。。

2020-03-19 19:18
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:4 
回复 5楼 return_0
真考虑效率
这个题目根本不应该递归
就算递归也应该是一路递归而不是两路
两路加剪枝还不如一路递归处理

https://zh.
2020-03-20 10:56
Sv少
Rank: 3Rank: 3
来 自:山东青岛
等 级:论坛游侠
威 望:1
帖 子:53
专家分:168
注 册:2011-11-7
收藏
得分:8 
           4                               F0
      3        2                     F1           F6
   2    1     1   0               F2     F5     F7    F8
 1  0                         F3    F4
 
  1+0
   1  +  1    1 + 0
      2    +    1
            3   
差不多就是这样,上面是count的值变化和运行顺序,下面是返回值得变化,最终返回3.count往下分叉等count=1或0时开始结束分叉,开始返回相应的结果。分叉时优先往左边分,符合if条件时就不能分了,就有返回值1。


Sv少  run
2020-03-20 13:25
lidepeng1995
Rank: 2
等 级:禁止访问
帖 子:30
专家分:43
注 册:2018-7-8
收藏
得分:0 
刚学算法算法确实懵,四楼给的代码正在看,希望有一天可以看懂,6楼说的很好,归纳我了解的并不深,深入学习是应该的,
八楼是在回答我的问题吗?还是4楼的问题?不过还是谢谢
九楼的给的例子很明白,感谢
2020-03-21 13:07
快速回复:新手求教,请问递归进行双递归应该怎么理解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018011 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved