最怕带for循环的递归函数
整数分解问题
1=1;
3=1+1+1;3=1+2;3=3;
这个程序我是画了程序运行情况的图才知道为什么search(remainder-i,i,nTerm+1)而不是search(remainder-i,i,nTerm++)
像归并排序这种递归,我现在也不思考程序如何运行了,假设递归是对的,直接往下写。
可如果是这种带for循环的我就头疼了,有人能解释下那个for(){ 递归函数 } 么
程序代码:
#include <stdio.h> #define MaxN 30 int Terms[MaxN] ; int N ; int count ; void Search( int remainder , int start , int nTerm ) { int i; if( remainder==0 ) { count++ ; //记录当前结果数,方便输出符号 if( count%4 != 1 ) printf(";") ; printf( "%d=%d",N,Terms[0] ) ; for(i=1 ; i<nTerm ;i++) printf( "+%d" , Terms[i] ) ; if (count%4==0) printf("\n") ; } else for( i=start ; i<=remainder ; i++ ) { Terms[nTerm] = i ; Search( remainder-i , i , nTerm+1 ) ; } } int main() { scanf("%d" , &N) ; count = 0 ; Search(N , 1 , 0) ; if(count%4!= 0) printf("\n") ; return 0 ; }