求C语言递归资料
最近在研究C语言递归,哪位有这方面资料的?最好是带详细分析的那种,有些递归自己看还是看不太懂,求助啊。。
其实不存在什么资料不资料,
我曾经也在递归迷茫了挺久。
递归其实就是在重复做同一个动作。
它能重复一次改变一次所有参数的值,然后继续重复。
递归最难的地方是如何正确的结束递归。
#include <stdio.h> int factorial(int n) { if(n == 0) return 1; return n * factorial(n - 1); } int main() { int n; scanf("%d", &n); printf("%d\n", factorial(n)); return 0; }递归2:Fibonacci
#include <stdio.h> int fibonacci(int n) { if(n <= 1) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } int main() { int n; scanf("%d", &n); printf("%d\n", fibonacci(n)); return 0; }递归3:Ackerman
#include <stdio.h> int ackerman(int n, int m) { if(n == 1 && m == 0) return 2; if(n == 0 && m >= 0) return 1; if(n >= 2 && m == 0) return n + 2; return ackerman(ackerman(n -1, m), m - 1); } int main() { int n, m; scanf("%d%d", &n, &m); printf("%d\n", ackerman(n, m)); return 0; } 递归4:全排列
#include <stdio.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void perm(int a[], int k, int m) { int i; if(k == m) { for(i = 0; i <= m; printf("%d", a[i++])) ; printf("\n"); } else for(i = k; i <= m; i++) { swap(&a[k], &a[i]); perm(a, k + 1, m); swap(&a[k], &a[i]); } } int main() { int a[] = {1, 2, 3}; perm(a, 0, 3 - 1); return 0; }递归5:整数划分
#include <stdio.h> int q(int n, int m) { if((n < 1) || (m < 1)) return 0; if((n == 1) || (m == 1)) return 1; if(n < m) return q(n, n); if(n == m) return q(n, m-1) + 1; return q(n, m-1) + q(n-m, m); } int main() { int m; scanf("%d", &m); printf("%d", q(m, m)); return 0; }递归6:Hanoi
#include <stdio.h> void move(char a, char b) { printf("%c---%c\n", a, b); } void hanoi(int n, char a, char b, char c) { if(n > 0) { hanoi(n - 1, a, c, b); move(a, b); hanoi(n - 1, c, b, a); } } int main() { int n; scanf("%d", &n); hanoi(n, 'a', 'b', 'c'); return 0; }一般教材上都有这些的...