看一下简单递归问题 卡在递归,为什么一直学不会

china_xc 2015-08-31 08:58:06
递归都看了好几天了,一直学不会啊,只会一层循环的递归,两层嵌套就不会了 例如打印
$
$$
$$$
$$$$
$$$$$


跪求给个学习方法
...全文
332 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-08-31
  • 打赏
  • 举报
回复
自底向上 自顶向下
useprlove 2015-08-31
  • 打赏
  • 举报
回复
@赵4老师 回答的主要是递归函数的编程实现上,而非设计。要设计递归函数主要分两步:
1. 确定状态(即函数所要实现的功能)。在这题中,函数f要达到输入一个参数n,打印n层的那种图形。
2. 确定状态转移方程(即递归方程)。在这题中,要实现n层图形只要先打印n-1层,再把最后一层打印出来即可,即如下递归方程:
f(n) = f(n-1), 然后打印 n个 '$'
3. 确定初始状态(即递归出口或叫终止条件)。在这题中,是:
f(0) = 不打印任何东西
综上,代码如下:
void f(int n){
if(!n)return;
f(n-1);
while(n--)putchar('$');
putchar('\n');
}
int main(){
f(5);
}
mujiok2003 2015-08-31
  • 打赏
  • 举报
回复
搞懂了函数调用的过程对学习递归应该有帮助。
赵4老师 2015-08-31
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
二班的码农 2015-08-31
  • 打赏
  • 举报
回复
递归的思路,挺好理解的。 楼主,你可以用数学公式理解 f(n) = f(n-1) + n; // n != 0 f(0) = 4; // n == 0 要想得到f(n)的值,就得先得到f(n-1)的值,这样层层递归,直到n == 0,则返回4; 因此递归函数: int f(int n) { if(n == 0) { return 4; } else { return f(n-1) + n; } } 再如楼主你提供的例子:要想打印n行$首先得打印前n-1行$,然后再打印第n行,则递归函数如下: void f(int n) { if(n == 0) { return; } else { f(n - 1); for(int i = 0; i < n; i++) { printf("$"); } printf("\n"); } }
宋寒松 2015-08-31
  • 打赏
  • 举报
回复
代码简单清晰,多看几遍就会了:

#include <stdio.h>

void print_dollar(int n)
{
    static int count = 1;
    int i;

    for(i = 0; i < count; i++)
    {
        putchar('$');
    }
    putchar('\n');
    count++;

    if(n > 1)
    {
        print_dollar(n - 1);
    }
}

int main(int argc, char* argv[])
{
    print_dollar(5);
    return 0;
}
夜晚的一场梦 2015-08-31
  • 打赏
  • 举报
回复
我觉得递归就是函数的自身调用吧,当达到某个条件的时候跳出循环。

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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